Синтаксис C# тот же: это все LINQ, который является лишь частью C#. Однако используемый вами API и методы, которым вы можете позвонить, могут отличаться от одного поставщика LINQ к другому.
Например, в LINQ to Objects вы можете вызывать практически любые методы, определенные в любых библиотеках C#. Однако Entity Framework и LINQ to SQL пытаются преобразовать вызовы методов в синтаксис SQL, поэтому, если они не были явно запрограммированы, чтобы знать, как преобразовать данный метод или операцию, вы получите ошибку времени выполнения при попытке выполнить запрос.
LINQ to XML эффективно поддерживается LINQ to Objects - я не думаю, что он использует собственный поставщик запросов, но API, который он предоставляет, позволяет обрабатывать XML-элементы, как если бы они были объектами. Вы не найдете методы, например .Elements()
, если вы запрашиваете, например. сбор в Entity Framework.
Большинство «LINQ к [X]» структуры основаны на вас вызова методов расширения на IQueryable<>
или IEnumerable<>
объектов, но вы можете включить LINQ выражение запроса синтаксис любого объекта путем внедрения методов, как .Where()
и .Select()
. Например, this Maybe type реализует .Where()
и .Select()
так что вы можете сказать:
from m in Maybe.From(GetValue())
where m.IsCool
select m.Name
Но он не реализует интерфейс IEnumerable<>
, поэтому такие методы, как GroupBy не реализованы. Если вы попытаетесь использовать синтаксис group x by y
в запросе на Maybe<>
, компилятор будет жаловаться.