LINQ и ADO.NETLINQ and ADO.NET

В настоящее время многие разработчики бизнес-приложений должны использовать два (или более) языка программирования: язык высокого уровня для бизнес-логики и презентации уровней (например Visual C# или Visual Basic) и язык запросов для взаимодействия с базой данных (например, Transact-SQL) .Today, many business developers must use two (or more) programming languages: a high-level language for the business logic and presentation layers (such as Visual C# or Visual Basic), and a query language to interact with the database (such as Transact-SQL). Для эффективной работы разработчик должен хорошо владеть несколькими языками, кроме того, возникают несоответствия между языками в среде разработки.This requires the developer to be proficient in several languages to be effective, and also causes language mismatches in the development environment. Например, приложение, которое использует API для доступа к данным, чтобы выполнить запрос к базе данных, указывает запрос как строковый литерал в кавычках.For example, an application that uses a data access API to execute a query against a database specifies the query as a string literal by using quotation marks. Такая строка запроса не читается компилятором и не проверяется на наличие синтаксических ошибок или наличие используемых строк или столбцов.This query string is un-readable to the compiler and is not checked for errors, such as invalid syntax or whether the columns or rows it references actually exist. Нет проверки соответствия типов параметров запроса и технологии IntelliSense.There is no type checking of the query parameters and no IntelliSense support, either.

LINQLanguage-Integrated Query (LINQ) позволяет разработчикам формировать в программном коде запросы, основанные на наборах, без использования дополнительного языка запросов.enables developers to form set-based queries in their application code, without having to use a separate query language. Можно писать запросы LINQLINQ к различным перечислимым источникам данных (источникам данных, которые реализуют интерфейс IEnumerable), таким как хранимые в памяти структуры данных, XML-документы, базы данных SQL и объекты DataSet.You can write LINQLINQ queries against various enumerable data sources (that is, a data source that implements the IEnumerable interface), such as in-memory data structures, XML documents, SQL databases, and DataSet objects. Несмотря на то что эти перечислимые источники данных реализованы различными способами, во всех них используется одинаковый синтаксис и языковые конструкции.Although these enumerable data sources are implemented in various ways, they all expose the same syntax and language constructs. Из-за того что запросы могут быть сформированы на языке программирования, нет необходимости использовать другой язык запросов, внедренный в виде строковых литералов, которые не могут быть проверены компилятором.Because queries can be formed in the programming language itself, you do not have to use another query language that is embedded as string literals that cannot be understood or verified by the compiler. Встраивание запросов в язык программирования позволяет программистам работать более производительно, предоставляя типов во время компиляции и проверки синтаксиса, Visual Studio и IntelliSense.Integrating queries into the programming language also enables Visual Studio programmers to be more productive by providing compile-time type and syntax checking, and IntelliSense. Эти функции уменьшают затраты на отладку запросов и поиск ошибок.These features reduce the need for query debugging and error fixing.

Передача данных из таблиц SQL в объекты в памяти часто бывает сложной и способствует совершению ошибок.Transferring data from SQL tables into objects in memory is often tedious and error-prone. Поставщик LINQLINQ, реализованный в LINQ to DataSetLINQ to DataSet и LINQ to SQLLINQ to SQL, преобразует исходные данные в данные, основанные на коллекции объектов, реализующих интерфейс IEnumerable.The LINQLINQ provider implemented by LINQ to DataSetLINQ to DataSet and LINQ to SQLLINQ to SQL converts the source data into IEnumerable-based object collections. Программист всегда видит данные как коллекции IEnumerable как при запросе, так и при обновлении.The programmer always views the data as an IEnumerable collection, both when you query and when you update. Для написания запросов к этим коллекциям предоставлена полная поддержка технологии IntelliSense.Full IntelliSense support is provided for writing queries against those collections.

Существуют три отдельные технологии ADO.NET LINQLanguage-Integrated Query (LINQ): LINQ to DataSetLINQ to DataSet, LINQ to SQLLINQ to SQL и LINQ to EntitiesLINQ to Entities.There are three separate ADO.NET LINQLanguage-Integrated Query (LINQ) technologies: LINQ to DataSetLINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to EntitiesLINQ to Entities. LINQ to DataSetLINQ to DataSet обеспечивает расширенные и оптимизированные запросы к DataSet и LINQ to SQLLINQ to SQL позволяет непосредственно запрашивать схемы баз данных SQL Server, и LINQ to EntitiesLINQ to Entities позволяет выполнять запросы к модели EDM.provides richer, optimized querying over the DataSet and LINQ to SQLLINQ to SQL enables you to directly query SQL Server database schemas, and LINQ to EntitiesLINQ to Entities allows you to query an Entity Data Model.

На следующей схеме даны общие сведения о связи технологий ADO.NET LINQ с высокоуровневыми языками программирования и источниками данных с поддержкой LINQ.The following diagram provides an overview of how the ADO.NET LINQ technologies relate to high-level programming languages and LINQ-enabled data sources.

LINQ к обзору ADO.NETLINQ to ADO.NET overview

Дополнительные сведения о LINQ см. в разделе Language Integrated Query (LINQ).For more information about LINQ, see Language Integrated Query (LINQ).

В следующих подразделах приведены дополнительные сведения о технологиях LINQ to DataSetLINQ to DataSet, LINQ to SQLLINQ to SQL и LINQ to EntitiesLINQ to Entities.The following sections provide more information about LINQ to DataSetLINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to EntitiesLINQ to Entities.

LINQ to DataSetLINQ to DataSet

DataSet — Это ключевой элемент модели автономного программирования, который выполняется на основе ADO.NET и широко используется.The DataSet is a key element of the disconnected programming model that ADO.NET is built on, and is widely used. Технология LINQ to DataSetLINQ to DataSet позволяет разработчикам создавать более функциональные запросы к DataSet с помощью механизма формирования запросов, который поддерживается для множества других источников данных.LINQ to DataSetLINQ to DataSet enables developers to build richer query capabilities into DataSet by using the same query formulation mechanism that is available for many other data sources. Дополнительные сведения см. в разделе LINQ to DataSet.For more information, see LINQ to DataSet.

LINQ to SQLLINQ to SQL

LINQ to SQLLINQ to SQL - удобный инструмент для разработчиков, которым необязательно сопоставление с концептуальной моделью.is a useful tool for developers who do not require mapping to a conceptual model. Использование LINQ to SQLLINQ to SQL дает возможность напрямую использовать модель программирования LINQLINQ с существующей схемой базы данных.By using LINQ to SQLLINQ to SQL, you can use the LINQLINQ programming model directly over existing database schema. LINQ to SQLLINQ to SQL Разработчики могут создавать классы .NET Framework, которые представляют данные.enables developers to generate .NET Framework classes that represent data. Вместо сопоставления с концептуальной моделью эти созданные классы указывают напрямую на таблицы базы данных, представления, хранимые процедуры и определяемые пользователем функции.Rather than mapping to a conceptual data model, these generated classes map directly to database tables, views, stored procedures, and user-defined functions.

С помощью LINQ to SQLLINQ to SQL можно писать код, направленный прямо к схеме хранилища, используя те же программные шаблоны LINQLINQ, что и для коллекций в памяти и DataSet, а также к другим источникам данных, таким как XML.With LINQ to SQLLINQ to SQL, developers can write code directly against the storage schema using the same LINQLINQ programming pattern as in-memory collections and the DataSet, in addition to other data sources such as XML. Дополнительные сведения см. в разделе LINQ to SQL.For more information, see LINQ to SQL.

LINQ to EntitiesLINQ to Entities

Большинство приложений на данный момент создаются на основе реляционных баз данных.Most applications are currently written on top of relational databases. Этим приложениям необходимо взаимодействовать с данными, представленными в реляционном виде.At some point, these applications will need to interact with the data represented in a relational form. Схемы баз данных не всегда идеально подходят для создания приложений, а концептуальные модели приложений не всегда совпадают с логическими моделями баз данных.Database schemas are not always ideal for building applications, and the conceptual models of application are not the same as the logical models of databases. Модель EDM — это концептуальная модель данных, можно использовать для моделирования данных определенного домена, чтобы приложения могли взаимодействовать с данными как объектами.The Entity Data Model is a conceptual data model that can be used to model the data of a particular domain so that applications can interact with data as objects. См. в разделе ADO.NET Entity Framework Дополнительные сведения.See ADO.NET Entity Framework for more information.

Через модель EDM реляционные данные представлены в виде объектов в среде .NET.Through the Entity Data Model, relational data is exposed as objects in the .NET environment. Благодаря этому поддержка LINQLINQ эффективно реализуется на уровне объектов, что позволяет составлять запросы баз данных на языке, используемом для сборки бизнес-логики.This makes the object layer an ideal target for LINQLINQ support, allowing developers to formulate queries against the database from the language used to build the business logic. Эта функция называется LINQ to EntitiesLINQ to Entities.This capability is known as LINQ to EntitiesLINQ to Entities. Дополнительные сведения см. в разделе LINQ to Entities.See LINQ to Entities for more information.

См. такжеSee also