Подтвердить что ты не робот

Linq для объектов vs linq для объектов - они одинаковы?

Я обычно использую термин entity для представления объекта бизнес-данных, и, на мой взгляд, теги linq to entities и linq to objects были одинаковыми. Неправильно ли это?

4b9b3361

Ответ 1

Это определенно не так.

LINQ-to-Objects - это набор методов расширения на IEnumerable<T>, которые позволяют выполнять операции запроса в памяти на произвольные последовательности объектов. При необходимости методы принимают простых делегатов.

LINQ-to-Entities - это поставщик LINQ, который имеет набор методов расширения на IQueryable<T>. Методы создают дерево выражений (поэтому делегаты фактически передаются как Expression<> s), и поставщик будет создавать SQL-запрос на основе его разбора этого дерева выражений.

В качестве примера рассмотрим следующие запросы:

var query1 = mydb.MyEntity.Select(x => x.SomeProp).Where(x => x == "Prop");
var query2 = mydb.MyEntity.Select(x => x.SomeProp).AsEnumerable().Where(x => x == "Prop");

Первый запрос будет создавать дерево выражений, состоящее из select и a где, с двумя лямбдами, которые фактически считаются LambdaExpression s. Поставщик LINQ to-Entities переводит это в SQL, который выбирает и фильтрует.

Второй запрос вставляет AsEnumerable(), который заставит оставшуюся часть запроса использовать LINQ-to-Objects. В этом случае поставщик будет генерировать SQL на основе только выбора, вернуть все эти записи из базы данных, а затем фильтрация будет происходить в памяти. Очевидно, что это будет намного медленнее.

Ответ 2

L2o - для объектов с памятью. L2e запрашивает базу данных.

Ответ 3

Linq для сущностей предназначен для использования с Entity Framework, тогда как Linq для объектов - для любой коллекции IEnumerable.

Подробнее:

Ответ 4

Linq to Objects Термин "LINQ to Objects" относится к использованию запросов LINQ с любой коллекцией IEnumerable или IEnumerable напрямую, без использования промежуточного провайдера LINQ или API, такого как LINQ to SQL или LINQ to XML. Вы можете использовать LINQ для запроса любых перечислимых коллекций, таких как List, Array или Dictionary. Коллекция может быть определена пользователем или может быть возвращена .NET Framework API.

В базовом смысле LINQ to Objects представляет новый подход к коллекциям. По-старому вам приходилось писать сложные петли foreach, которые указывали, как извлекать данные из коллекции. В подходе LINQ вы пишете декларативный код, описывающий то, что вы хотите получить.

ref: http://msdn.microsoft.com/en-us/library/bb397919.aspx

Linq to Entity LINQ to Entities обеспечивает поддержку языкового интегрирования (LINQ), которая позволяет разработчикам писать запросы к концептуальной модели Entity Framework с использованием Visual Basic или Visual С#. Запросы к платформе Entity Framework представлены запросами дерева команд, которые выполняются в контексте объекта. LINQ to Entities преобразует запросы запросов LINQ (LINQ) к запросам дерева команд, выполняет запросы против Entity Framework и возвращает объекты, которые могут использоваться как Entity Framework, так и LINQ. Ниже приведен процесс создания и выполнения запроса LINQ to Entities: Ссылка: http://msdn.microsoft.com/en-us/library/bb386964.aspx

Ответ 5

Linq2Entities означает запрос данных через ADO.NET Entity Framework (Database)

Linq2Objects означает запрос в данных памяти (локальные объекты).