linq to entities vs linq to objects-czy są takie same?

Zwykle używam terminu entity do reprezentowania obiektu danych biznesowych i w moim umyśle linq to entities i linq to objects były takie same. Czy to nie prawda?

Author: Alex J, 2011-08-25

5 answers

Zdecydowanie tak nie jest.

LINQ-to-Objects jest zestawem metod rozszerzenia IEnumerable<T>, które pozwalają wykonywać operacje zapytań w pamięci na dowolnych sekwencjach obiektów. Metody akceptują proste delegaty, gdy jest to konieczne.

LINQ-to-Entities jest dostawcą LINQ, który ma zestaw metod rozszerzeń na IQueryable<T>. Metody budują drzewo wyrażeń (dlatego delegaty są faktycznie przekazywane jako Expression<> s), a dostawca zbuduje zapytanie SQL na podstawie jego parsowania tego drzewa wyrazu.

Jako przykład rozważ następujące zapytania:

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");

Pierwsze zapytanie zbuduje drzewo wyrażeń składające się z select i where, z dwoma lambdami faktycznie uważanymi za LambdaExpressions. dostawca LINQ-to-Entities przełoży to na SQL, który zarówno wybiera, jak i filtruje.

Drugie zapytanie wstawia AsEnumerable(), co zmusi resztę zapytania do użycia LINQ-to-Objects. W takim przypadku dostawca wygeneruje SQL na podstawie tylko zaznaczenie, zwróci wszystkie te rekordy z bazy danych, a wtedy nastąpi filtrowanie w pamięci. Oczywiście, to prawdopodobnie będzie znacznie wolniejsze.

 46
Author: dlev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 14:25:37

L2o jest dla obiektów w pamięci. L2e zapytuje bazę danych.

 10
Author: msfanboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 14:32:14

Linq to entities jest przeznaczony do użycia z Entity Framework, podczas gdy Linq to objects jest dla dowolnej liczby kolekcji.

Więcej Szczegółów:

  1. Linq to Entities
  2. Linq to Objects
 8
Author: onof,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 14:24:30

Linq to Objects Termin "LINQ to Objects" odnosi się do użycia zapytań LINQ z dowolną liczbą IEnumerable lub IEnumerable collection bezpośrednio, bez użycia pośredniego dostawcy LINQ lub API, takiego jak LINQ to SQL lub LINQ to XML. Możesz użyć LINQ do odpytywania dowolnych zbiorów, takich jak lista, Tablica lub Słownik. Kolekcja może być zdefiniowana przez użytkownika lub może być zwracana przez API.NET Framework.

W podstawowym znaczeniu, LINQ to Objects reprezentuje nowe podejście do zbiorów. W starym stylu trzeba było pisać złożone pętle foreach, które określały sposób pobierania danych z kolekcji. W podejściu LINQ piszesz deklaratywny kod, który opisuje to, co chcesz odzyskać.

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

Linq to Entity LINQ to Entities zapewnia obsługę zapytań zintegrowanych z językiem (LINQ), która umożliwia programistom pisanie zapytań w oparciu o model koncepcyjny Entity Framework przy użyciu Visual Basic lub Visual C#. Zapytania dotyczące struktury encji są reprezentowane przez zapytania z drzewa poleceń, które są wykonywane względem kontekstu obiektu. LINQ do encji konwertuje zapytania zintegrowane z językiem (LINQ) do zapytań drzewa poleceń, wykonuje zapytania względem struktury encji i zwraca obiekty, które mogą być używane zarówno przez strukturę encji, jak i LINQ. Poniżej znajduje się proces tworzenia i wykonywania zapytania LINQ to Entities: Ref : http://msdn.microsoft.com/en-us/library/bb386964.aspx

 8
Author: JSJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 14:32:19

Linq2tities oznacza odpytywanie danych za pomocą ADO.NET Entity Framework (Baza Danych)

Linq2objects oznacza zapytanie w pamięci danych (obiekty lokalne).

 2
Author: Jan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 14:25:38