LINQ と ADO.NETLINQ and ADO.NET

現在、多くのビジネス開発者は、2つ (またはそれ以上) のプログラミング言語を使用する必要があります。ビジネスロジックとC#プレゼンテーション層の高水準言語 (Visual や 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.

統合言語クエリ (LINQ: Language-Integrated Query)Language-Integrated Query (LINQ) により、開発者はアプリケーション コード内でプログラミング言語とクエリ言語を使い分けることなく、セット ベースのクエリを作成できます。enables developers to form set-based queries in their application code, without having to use a separate query language. インメモリのデータ構造、XML ドキュメント、SQL データベース、LINQLINQ オブジェクトなど、列挙可能な各種データ ソース (つまり、IEnumerable インターフェイスを実装するデータ ソース) に対する 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. クエリをプログラミング言語に統合することにより、コンパイル時の型と構文チェック、およびIntelliSenseを提供することで、Visual Studio プログラマの生産性を向上させることができます。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. LINQ to DataSet によって実装さLINQ to SQLLINQ to SQLれたIEnumerableプロバイダー。ソースデータをベースのオブジェクトコレクションにLINQLINQ変換します。The LINQLINQ provider implemented by LINQ 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 統合言語クエリ (LINQ: Language-Integrated Query)Language-Integrated Query (LINQ) には、3 つのテクノロジがあります。LINQ to DataSet、LINQ to SQLLINQ to SQL、LINQ to Entities です。There are three separate ADO.NET 統合言語クエリ (LINQ: Language-Integrated Query)Language-Integrated Query (LINQ) technologies: LINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ to Entities. LINQ to DataSet は、に対してより高度DataSetLINQ to SQLLINQ to SQL最適化されたクエリを提供し、SQL Server データベーススキーマに直接クエリを実行できるようにします。また LINQ to Entities では、Entity Data Model に対してクエリを実行できます。LINQ to DataSet 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 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 to ADO.NET の概要LINQ to ADO.NET overview

LINQ の詳細については、「統合言語クエリ (linq)」を参照してください。For more information about LINQ, see Language Integrated Query (LINQ).

次のセクションでは、LINQ to DataSet、 LINQ to SQLLINQ to SQL、および LINQ to Entities の詳細について説明します。The following sections provide more information about LINQ to DataSet, LINQ to SQLLINQ to SQL, and LINQ 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 DataSet を使用すると、開発者はDataSet 、他の多くのデータソースで使用できるのと同じクエリ定式化メカニズムを使用して、豊富なクエリ機能をに組み込むことができます。LINQ 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 では、開発者が、XML などのデータ ソースに加え、インメモリ コレクションや LINQLINQ と同じ DataSet プログラミング パターンを使用して、ストレージ スキーマに対して直接コードを記述できます。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. Entity Data Model は、アプリケーションがデータをオブジェクトとして操作できるように、特定のドメインのデータをモデル化するために使用できる概念データモデルです。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.

Entity Data Model では、リレーショナル データが .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 Entities と呼ばれます。This capability is known as LINQ to Entities. LINQ の詳細については、「LINQ to Entities」を参照してください。See LINQ to Entities for more information.

関連項目See also