2014-07-10 4 views
1

Синтаксис LinqToSQL такой же, как LinqToEntity или любой другой LINQ_TO? Есть ли дополнительный синтаксис (используемые методы), который можно использовать, когда мы обрабатываем, например, данные с SQL-сервера, которые не могут использоваться в данных XML или данных массива?Синтаксис LinqToSQL такой же, как LinqToEntity или любой другой LINQ_TO?

Я понимаю, что я могу использовать на все методы DataSources показанных здесь: http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

но есть некоторые методы, которые являются специфическими для некоторых поставщиков LINQ?

Или можно с уверенностью сказать, что синтаксис LINQ на 100% совместим со всеми поставщиками?

ответ

1

Синтаксис 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<>, компилятор будет жаловаться.

1

Вы смешиваете LINQ и ORM.

LINQ предоставляет запрос объекта по сбору объектов, IEnuerable<T>, IQueryable<T>.

ORM обеспечивает функциональность для связи с базой данных через объекты.

Некоторые методы, такие как Last/LastOrDefault, TakeWhile не работает с LINQ для SQL, так как LINQ к SQL отвечает за перевод LINQ запрос при прокладке источника данных языка т.е. SQL.

Вы можете увидеть: Standard Query Operator Translation

Аналогичным образом могут быть методы LINQ, которые поддерживаются в наборе памяти, но не поддерживаются для других провайдеров. Это будет зависеть от каждого провайдера.

Смежные вопросы