現在、多くのビジネス開発者は、ビジネス ロジックとプレゼンテーション レイヤーの高度な言語 (Visual C# や Visual Basic など) と、データベースと対話するためのクエリ言語 (Transact-SQLなど) の 2 つのプログラミング言語を使用する必要があります。 そのためには、開発者が複数の言語に習熟している必要があり、開発環境で言語の不一致が発生します。 たとえば、データ アクセス API を使用してデータベースに対してクエリを実行するアプリケーションでは、引用符を使用してクエリを文字列リテラルとして指定します。 このクエリ文字列はコンパイラでは読み取り不可能であり、無効な構文や、参照する列または行が実際に存在するかどうかなど、エラーがチェックされません。 クエリ パラメーターの型チェックはなく、 IntelliSense
もサポートされません。
Language-Integrated クエリ (LINQ) を使用すると、開発者は別のクエリ言語を使用しなくても、アプリケーション コードでセットベースのクエリを作成できます。 メモリ内データ構造、XML ドキュメント、SQL データベース、IEnumerable オブジェクトなど、さまざまな列挙可能なデータ ソース (つまり、DataSet インターフェイスを実装するデータ ソース) に対して LINQ クエリを記述できます。 これらの列挙可能なデータ ソースはさまざまな方法で実装されていますが、すべて同じ構文と言語コンストラクトを公開します。 クエリはプログラミング言語自体で形成できるため、コンパイラで認識または検証できない文字列リテラルとして埋め込まれている別のクエリ言語を使用する必要はありません。 また、クエリをプログラミング言語に統合することで、コンパイル時の型と構文のチェック、および IntelliSense
を提供することで、Visual Studio プログラマの生産性を高めることもできます。 これらの機能により、クエリのデバッグとエラー修正の必要性が軽減されます。
SQL テーブルからメモリ内のオブジェクトへのデータの転送は、多くの場合、面倒でエラーが発生しやすくなります。 LINQ to DataSet と LINQ to SQL によって実装された LINQ プロバイダーは、ソース データを IEnumerable ベースのオブジェクト コレクションに変換します。 プログラマは、クエリ時と更新時の両方で、常にデータを IEnumerable コレクションとして表示します。 これらのコレクションに対するクエリを記述するための完全な IntelliSense
サポートが提供されています。
LINQ to DataSet、LINQ to SQL、LINQ to Entities の 3 つの個別の ADO.NET Language-Integrated クエリ (LINQ) テクノロジがあります。 LINQ to DataSet には、 DataSet と LINQ to SQL に対する高度で最適化されたクエリが用意されており、SQL Server データベース スキーマに対して直接クエリを実行できます。LINQ to Entities を使用すると、エンティティ データ モデルに対してクエリを実行できます。
次の図は、ADO.NET 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 を使用すると、開発者は、XML などの他のデータ ソースに加えて、メモリ内コレクションや DataSetと同じ LINQ プログラミング パターンを使用して、ストレージ スキーマに対して直接コードを記述できます。 詳細については、「 LINQ to SQL」を参照してください。
LINQ to Entities
現在、ほとんどのアプリケーションはリレーショナル データベースの上に記述されています。 ある時点で、これらのアプリケーションはリレーショナル形式で表されるデータと対話する必要があります。 データベース スキーマは、アプリケーションの構築に常に最適とは限りません。また、アプリケーションの概念モデルは、データベースの論理モデルと同じではありません。 Entity Data Model は、アプリケーションがオブジェクトとしてデータを操作できるように、特定のドメインのデータをモデル化するために使用できる概念データ モデルです。 詳細については、「 ADO.NET Entity Framework」を参照してください。
エンティティ データ モデルを使用すると、リレーショナル データは .NET 環境内のオブジェクトとして公開されます。 これにより、オブジェクト レイヤーは LINQ サポートの理想的なターゲットになり、開発者はビジネス ロジックの構築に使用される言語からデータベースに対するクエリを作成できます。 この機能は LINQ to Entities と呼ばれます。 詳細については、「 LINQ to Entities」を参照してください。