Каково различие между “LINQ к Объектам”, “LINQ к SQL” и “LINQ к Набору данных”

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

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

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

86
задан Michael Petrotta 14 March 2010 в 21:51
поделиться

3 ответа

  • все они являются 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

106
ответ дан 24 November 2019 в 08:01
поделиться

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

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

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

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

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

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

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

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

26
ответ дан 24 November 2019 в 08:01
поделиться

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 - и компилятору все равно! Пока он может разрешить некоторый подходящий метод с именем , где , который может принимать лямбда, и в результате этого некоторый Select метод, который может принимать лямбда, доволен.

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

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

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

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

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

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

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

36
ответ дан 24 November 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: