В чем разница между «LINQ to Entities», «LINQ to SQL» и «LINQ to Dataset»

StackOverflow https://stackoverflow.com/questions/2443836

Вопрос

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

Успешный ответ будет содержать краткое различие между ними.Какова основная цель каждого варианта, какова его польза и влияет ли это на производительность...

P.S.Я знаю, что существует множество источников информации, но я ищу своего рода «шпаргалку», которая подскажет новичку, куда двигаться для достижения конкретной цели.

Это было полезно?

Решение

  • все они LINQ (Language Integrated Query), поэтому все они имеют много общего.Все эти «диалекты» по сути позволяют вам выбирать данные в стиле запроса из различных источников.

  • Linq-to-SQL — это первая попытка Microsoft создать ORM — объектно-реляционный картограф.Он поддерживает только SQL Server.Это технология сопоставления таблиц базы данных SQL Server с объектами .NET.

  • Linq-to-Entities это та же идея, но с использованием Entity Framework в фоновом режиме, что и ORM — опять же от Microsoft, но с поддержкой нескольких серверных баз данных.

  • Linq-to-DataSets - это LINQ, но его использование противоречит наборам данных ADO.NET 2.0 "старого стиля" - во времена, когда еще не было ORM от Microsoft, все, что вы могли делать с ADO.NET, - это возвращать наборы данных, таблицы данных и т. д., а также запросы Linq-to-DataSets. эти хранилища данных для данных.Итак, в этом случае вы должны вернуть DataTable или DataSets (пространство имен System.Data) из серверной части базы данных, а затем запросить их, используя синтаксис LINQ.

Другие советы

LINQ — это широкий набор технологий, основанных (например) на синтаксисе понимания запросов, например:

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

который отображается компилятором в код:

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

и здесь настоящий магия начинается.Обратите внимание: мы не сказали, что Foo здесь - и компилятору все равно!Пока это может решить некоторый подходящий метод под названием Where который может принимать лямбду, и результат этого имеет некоторый Select метод, который может принять лямбду, он доволен.

Теперь учтите, что лямбду можно скомпилировать или в анонимный метод (делегат для LINQ-to-Objects, который включает LINQ-to-DataSet), или в дерево выражений (модель времени выполнения, которая представляет лямбда-выражение в объектной модели).

Для данных в памяти (обычно IEnumerable<T>), он просто выполняет делегат — отлично и быстро.Но для IQueryable<T> объект-представление выражения (a LambdaExpression<...>) он может разобрать его и применить к любому примеру «LINQ-to-Something».

Для баз данных (LINQ-to-SQL, LINQ-to-Entities) это может означать написание TSQL, например:

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

Но это может (например, для служб данных ADO.NET) означать написание HTTP-запроса.

Выполнение хорошо написанного запроса TSQL, возвращающего небольшой объем данных, происходит быстрее, чем загрузка всей базы данных по сети и последующая фильтрация на клиенте.Однако у обоих есть идеальные сценарии и явно неправильные сценарии.

Цель и преимущество здесь — позволить вам использовать единый синтаксис со статической проверкой для запроса широкого спектра источников данных и сделать код более выразительным (например, традиционный код для группировки данных не подходит). очень ясно с точки зрения того, что он пытается сделать — оно теряется в массе кода).

LINQ означает запрос, интегрированный в язык.Он позволяет использовать язык запросов «в стиле SQL» непосредственно в C# для извлечения информации из источников данных.

  • Этим источником данных может быть база данных SQL-сервера. Linq для SQL
  • Этот источник данных может быть контекстом данных объектов инфраструктуры сущностей - Linq для сущностей.
  • Этим источником данных могут быть наборы данных ADO.net. Linq для набора данных.

Этот источник данных также может быть файлом XML – Linq в XML.
Или даже просто класс коллекции простых объектов — Linq для объектов.

LINQ описывает технологию запросов, остальная часть имени описывает источник запрашиваемых данных.

Немного дополнительной информации:

Наборы данных представляют собой объекты ADO.net, где данные загружаются из базы данных в набор данных .net, а Linq может использоваться для запроса этих данных после их загрузки.

С Linq для SQL вы определяете классы .net, которые сопоставляются с базой данных, а Linq-to-SQL заботится о загрузке данных из базы данных SQL-сервера.

И, наконец, Структура сущности — это система, в которой вы можете определить сопоставление базы данных и объектов в XML, а затем использовать Linq для запроса данных, загружаемых с помощью этого сопоставления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top