Я уже довольно давно работаю с LINQ. Однако остается загадкой, каковы реальные различия между упомянутыми разновидностями LINQ.
Успешный ответ будет содержать краткое различие между ними. Какова основная цель каждого аромата, каковы преимущества и влияние на производительность ...
PS Я знаю, что существует множество источников информации, но я ищу своего рода «шпаргалку», которая инструктирует новичка, куда идти для конкретной цели.
Ответы:
все они являются LINQ - Language Integrated Query, поэтому все они имеют много общего. Все эти «диалекты» в основном позволяют вам выбирать данные из различных источников в стиле запроса.
Linq-to-SQL - это первая попытка Microsoft создать ORM - Object-Relational Mapper. Он поддерживает только 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>
объектного представления выражения (а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 # для извлечения информации из источников данных.
Этим источником данных также может быть файл XML - Linq to XML .
Или даже просто класс коллекции простых объектов - Linq to Objects .
LINQ описывает технологию запросов, остальная часть имени описывает источник запрашиваемых данных.
Для дополнительной информации:
Наборы данных - это объекты ADO.net, в которые данные загружаются из базы данных в набор данных .net, а Linq может использоваться для запроса этих данных после их загрузки.
С Linq to SQL вы определяете классы .net, которые сопоставляются с базой данных, а Linq-to-SQL заботится о загрузке данных из базы данных SQL-сервера.
И, наконец, Entity framework - это система, в которой вы можете определить базу данных и отображение объектов в XML, а затем использовать Linq для запроса данных, загружаемых через это отображение.
источник