LINQ и ADO.NET

Обновлен: November 2007

В настоящее время многие разработчики бизнес-приложений должны использовать два (или более) языка программирования: язык высокого уровня для бизнес-логики и уровней представления (такой как Visual C# или Visual Basic) и язык запросов для взаимодействия с базой данных (такой как Transact-SQL). Для эффективной работы разработчик должен хорошо владеть несколькими языками, кроме того, возникают несоответствия между языками в среде разработки. Например, приложение, которое использует API для доступа к данным, чтобы выполнить запрос к базе данных, указывает запрос как строковый литерал в кавычках. Такая строка запроса не читается компилятором и не проверяется на наличие синтаксических ошибок или наличие используемых строк или столбцов. Нет проверки соответствия типов параметров запроса и технологии IntelliSense.

LINQ (Language-Integrated Query) позволяет разработчикам формировать в программном коде запросы, основанные на наборах, без использования дополнительного языка запросов. Можно писать запросы LINQ к различным перечислимым источникам данных (источникам данных, которые реализуют интерфейс IEnumerable), таким как хранимые в памяти структуры данных, XML-документы, базы данных SQL и объекты DataSet. Несмотря на то что эти перечислимые источники данных реализованы различными способами, во всех них используется одинаковый синтаксис и языковые конструкции. Из-за того что запросы могут быть сформированы на языке программирования, нет необходимости использовать другой язык запросов, внедренный в виде строковых литералов, которые не могут быть проверены компилятором. Встраивание запросов в язык программирования позволяет программистам, использующим среду Visual Studio, быть более продуктивными, предоставляя им проверку синтаксиса и соответствия типов во время компиляции и возможности технологии IntelliSense. Эти функции уменьшают затраты на отладку запросов и поиск ошибок.

Существуют три отдельные технологии ADO.NET LINQ (Language-Integrated Query): LINQ to DataSet ,LINQ to SQL и LINQ to Entities. Технология LINQ to DataSet предоставляет широкие оптимизированные возможности создания запросов через объект DataSet, технология LINQ to SQL позволяет непосредственно запрашивать схемы баз данных SQL Server, а технология LINQ to Entities позволяет запрашивать EDM (модель).

Передача данных из таблиц SQL в объекты в памяти часто бывает сложной и способствует совершению ошибок. Поставщик LINQ, реализованный в LINQ to DataSet и LINQ to SQL, преобразует исходные данные в данные, основанные на коллекции объектов, реализующих интерфейс IEnumerable. Программист всегда видит данные как коллекции IEnumerable как при запросе, так и при обновлении. Для написания запросов к этим коллекциям предоставлена полная поддержка технологии IntelliSense.

Приведенная ниже диаграмма дает общее представление о связи технологий ADO.NET LINQ с высокоуровневыми языками программирования и источниками данных с включенной поддержкой LINQ.

Общие сведения о технологии LINQ to ADO.NET

В следующих подразделах приведены дополнительные сведения о технологиях LINQ to DataSet, LINQ to SQL и LINQ to Entities.

LINQ to DataSet

DataSet — это ключевой элемент модели автономного программирования, на которой построена технология ADO.NET и которая широко используется. LINQ to DataSet позволяет разработчикам встраивать более богатые возможности для запросов в DataSet с использованием механизма составления запросов, который доступен для многих других источников данных. Дополнительные сведения см. в разделе LINQ to DataSet.

LINQ to SQL

LINQ to SQL — удобный инструмент для разработчиков, которым необязательно сопоставление с концептуальной моделью. Применяя LINQ to SQL, можно использовать программную модель LINQ напрямую через существующую схему базы данных. LINQ to SQL позволяет создавать классы платформы .NET Framework, которые отображают данные. Вместо сопоставления с концептуальной моделью эти созданные классы указывают напрямую на таблицы базы данных, представления, хранимые процедуры и определяемые пользователем функции.

С помощью LINQ to SQL можно писать код, направленный прямо к схеме хранилища, используя те же программные шаблоны LINQ, что и для коллекций в памяти и DataSet, а также к другим источникам данных, таким как XML. Дополнительные сведения см. в разделе LINQ to SQL.

LINQ to Entities

В настоящее время большинство приложений создается на основе реляционных баз данных. Этим приложениям необходимо взаимодействовать с данными, представленными в реляционном виде. Схемы баз данных не всегда идеально подходят для создания приложений, а концептуальные модели приложений не всегда совпадают с логическими моделями баз данных. EDM (модель) представляет собой концептуальную модель данных, которую можно использовать для моделирования данных конкретного домена, что позволяет приложениям взаимодействовать с данными как с объектами. Дополнительные сведения см. в разделе ADO.NET Entity Framework.

В модели EDM (модель) реляционные данные представлены в виде объектов в среде .NET. Это делает уровень объектов идеальным для поддержки LINQ и позволяет разработчикам формулировать запросы к базе данных на языке, используемом для создания бизнес-логики. Эта возможность называется LINQ to Entities. Дополнительные сведения см. в разделе LINQ to Entities.

См. также

Другие ресурсы

LINQ to DataSet

LINQ to SQL

LINQ to Entities

LINQ