Jaka jest różnica między "LINQ to Entities", "LINQ to SQL" i " LINQ to Dataset"

Pracuję już od jakiegoś czasu z LINQ. Pozostaje jednak trochę tajemnicą, jakie są realne różnice między wspomnianymi smakami LINQ.

Skuteczna odpowiedź będzie zawierać krótkie rozróżnienie między nimi. Jaki jest główny cel każdego smaku, jakie są korzyści i czy ma to wpływ na wydajność...

P. S. Wiem, że istnieje wiele źródeł informacji, ale szukam czegoś w rodzaju "ściągawki", która instruuje początkującego, gdzie udać się do określonego celu.

Author: Michael Petrotta, 2010-03-15

3 answers

  • Wszystkie z nich są zapytaniami zintegrowanymi w języku LINQ - więc wszystkie mają wiele wspólnego. Wszystkie te "dialekty" zasadniczo pozwalają na wybranie danych w stylu zapytań z różnych źródeł.

  • Linq-to-SQL jest pierwszą próbą Microsoft na ORM-Object-Relational Mapper. Obsługuje tylko SQL Server. Jest to technologia mapowania mapowania tabel bazy danych SQL Server do obiektów. NET.

  • Linq-to-Entities to ta sama idea, ale za pomocą Encja Framework w tle, jako ORM-ponownie od Microsoftu, ale obsługujący wiele backendów baz danych

  • Linq-to-DataSets to LINQ, ale używanie jest wbrew "staremu stylowi" ADO.NET 2.0 DataSets - w czasach przed ORM ' s od Microsoftu, wszystko, co można zrobić z ADO.NET zwracało zbiory danych, bazy danych itp., a Linq-to-DataSets zapytuje te magazyny danych o dane. Tak więc w tym przypadku zwrócisz DataTable lub DataSets (System.Data namespace) z bazy danych backend, a następnie odpytywanie tych za pomocą składni LINQ

 97
Author: marc_s,
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
2010-03-14 21:26:40

LINQ to szeroki zestaw technologii, oparty na (na przykład) składni rozumienia zapytań, na przykład:

var qry = from x in source.Foo
          where x.SomeProp == "abc"
          select x.Bar;

Który jest mapowany przez kompilator do kodu:

var qry = source.Foo.Where(x => x.SomeProp == "abc").Select(x => x.Bar);

I tu zaczyna sięprawdziwa Magia. Zauważ, że nie powiedzieliśmy, co Foo jest tutaj - a kompilator ma to gdzieś! Tak długo, jak może rozwiązać jakąś odpowiednią metodę zwaną Where, która może przyjąć lambda, a wynik tego ma pewne Select metoda akceptująca lambda, jest szczęśliwy.

Rozważmy teraz, że lambda może być skompilowana albo do anonimowej metody (delegate, for LINQ-to-Objects, która zawiera LINQ-to-DataSet), lub do drzewa wyrażeń (runtime model, który reprezentuje lambda w modelu obiektowym).

Dla danych w pamięci (zazwyczaj IEnumerable<T>), po prostu wykonuje delegata-dobrze i szybko. Ale dla IQueryable<T> reprezentacji obiektu wyrażenia (a LambdaExpression<...>) można ją rozłożyć i zastosować do dowolnego Przykład "LINQ-to-Something".

Dla baz danych (LINQ-to-SQL, LINQ-to-Entities) może to oznaczać zapisanie TSQL, na przykład:

SELECT x.Bar
FROM [SomeTable] x
WHERE x.SomeProp = @p1

Ale może (dla ADO.NET usługi danych, na przykład) oznaczają zapis zapytania HTTP.

Wykonywanie dobrze napisanego zapytania TSQL, które zwraca niewielką ilość danych, jest szybsze niż ładowanie całej bazy danych przez sieć, a następnie filtrowanie u klienta. Oba mają idealne scenariusze i zwykłe-złe scenariusze.

Cel i korzyścią jest tutaj umożliwienie użycia pojedynczej, sprawdzanej statycznie składni do odpytywania szerokiego zakresu źródeł danych i uczynienie kodu bardziej ekspresyjnym ("tradycyjny" kod do grupowania danych, na przykład, nie jest zbyt jasny pod względem tego, co próbuje zrobić - jest zagubiony w masie kodu).

 36
Author: Marc Gravell,
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
2018-07-13 17:15:28

LINQ oznacza language integrated query. Pozwala na użycie języka zapytań" SQL style " bezpośrednio w C# do wyodrębniania informacji ze źródeł danych.

  • tym źródłem danych może być baza danych serwera SQL-to jest Linq do SQL
  • to źródło danych może być kontekstem danych obiektów entity framework- Linq do entity .
  • tym źródłem danych może być ADO.net zbiory danych- Linq to Dataset .

Że źródło danych może być również plikiem XML- Linq do XML .
A nawet po prostu Klasa zbiorów zwykłych obiektów- Linq to Objects .

LINQ opisuje technologię zapytań, reszta nazwy opisuje źródło zapytanych danych.

Dla odrobiny dodatkowego tła:

Zbiory danych są ADO.net obiekty, w których dane są ładowane z bazy danych do zbioru danych. NET i Linq mogą być używane do odpytywania tych danych po ich załadowaniu.

With Linq to SQL definiujesz klasy. Net, które mapują do bazy danych, a Linq-to-SQL zajmuje się ładowaniem danych z bazy danych SQL server

I wreszcie Entity framework {[5] } jest systemem, w którym można zdefiniować bazę danych i mapowanie obiektów w XML, a następnie użyć Linq do odpytywania danych ładowanych za pomocą tego mapowania.

 25
Author: Simon P Stevens,
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
2010-03-14 21:39:25