LINQ и ADO.NET
В настоящее время многие разработчики бизнес-приложений должны использовать два (или более) языка программирования: язык высокого уровня для бизнес-логики и уровней представления (такой как Visual C# или Visual Basic) и язык запросов для взаимодействия с базой данных (такой как Transact-SQL).Для эффективной работы разработчик должен хорошо владеть несколькими языками, кроме того, возникают несоответствия между языками в среде разработки.Например, приложение, которое использует API для доступа к данным, чтобы выполнить запрос к базе данных, указывает запрос как строковый литерал в кавычках.Такая строка запроса не читается компилятором и не проверяется на наличие синтаксических ошибок или наличие используемых строк или столбцов.Нет проверки соответствия типов параметров запроса и технологии IntelliSense.
LINQ (Language-Integrated Query) позволяет разработчикам формировать в программном коде запросы, основанные на наборах, без использования дополнительного языка запросов.Можно писать запросы LINQ к различным перечислимым источникам данных (источникам данных, которые реализуют интерфейс IEnumerable), таким как хранимые в памяти структуры данных, XML-документы, базы данных SQL и объекты DataSet.Несмотря на то что эти перечислимые источники данных реализованы различными способами, во всех них используется одинаковый синтаксис и языковые конструкции.Из-за того что запросы могут быть сформированы на языке программирования, нет необходимости использовать другой язык запросов, внедренный в виде строковых литералов, которые не могут быть проверены компилятором.Встраивание запросов в язык программирования позволяет программистам, использующим среду Visual Studio, быть более продуктивными, предоставляя им проверку синтаксиса и соответствия типов во время компиляции и возможности технологии IntelliSense.Эти функции уменьшают затраты на отладку запросов и поиск ошибок.
Передача данных из таблиц SQL в объекты в памяти часто бывает сложной и способствует совершению ошибок.Поставщик LINQ, реализованный в LINQ to DataSet и LINQ to SQL, преобразует исходные данные в данные, основанные на коллекции объектов, реализующих интерфейс IEnumerable.Программист всегда видит данные как коллекции IEnumerable как при запросе, так и при обновлении.Для написания запросов к этим коллекциям предоставляется полная поддержка технологии 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 (модель).
На следующей схеме даны общие сведения о связи технологий ADO.NET LINQ с высокоуровневыми языками программирования и источниками данных с поддержкой LINQ.
Общие сведения о возможностях языка LINQ см. в разделе Введение в LINQ.Сведения об использовании LINQ в приложениях см. в разделе Общее руководство программирования на LINQ, где подробно описано использование технологий LINQ.
В следующих подразделах приведены дополнительные сведения о технологиях 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.