言語統合クエリとは何ですか?
言語統合クエリ(LINQ)は、宣言型クエリ構文を命令型言語(主にC#およびVB.NET)にシームレスに統合する機能を提供します。 LINQの開発により、オブジェクト指向環境で作業する開発者がクエリを実行するときに遭遇する問題が解決されました。 2007年11月にMicrosoft®.NET Frameworkバージョン3.5の一部として、またVisualStudio®コードネーム「Orcas」で導入されました。
言語統合クエリを作成する前は、.NET言語にはリレーショナルデータベースまたはXMLドキュメントをネイティブにクエリする方法がありませんでした。 これらの言語で作成する開発者は、SQLまたはXQueryをそれぞれ文字列として埋め込み、結果のデータを.NETオブジェクトに手動でマッピングする必要がありました。 埋め込まれたクエリ文字列とマッピングは、.NETコンパイラで検証できなかったため、実行時に潜在的なエラーを発見できました。
言語統合クエリの前に開発者が直面した別の問題は、.NET言語には.NETオブジェクトのコレクションをクエリするためのオブジェクト指向の構文しかなかったことです。 通常、開発者はソースコレクション全体を反復処理し、検索条件に基づいて新しい結果コレクションを構築します。 開発者は、結果コレクションを構築しながらデータを変換することもできます。 このアプローチは面倒でした。 C#またはVBで記述された単純な選択クエリは少なくとも5行のコードを必要としますが、同じクエリはクエリ言語で1行のコードを必要とします。
オブジェクト指向環境内でのクエリの課題により、MicrosoftはLINQを作成するきっかけになりました。 LINQは、静的な型チェックを備えた、C#またはVBとインラインで使用されるSQLを連想させるクエリ構文を提供します。 ネストされたループを使用する代わりに、.NETコレクションを照会する場合、開発者はLINQ構文を使用してアイテムを選択し、データを変換できます。 他の利点の中でも、これにより、純粋にオブジェクト指向の構文と比較してコードの行が少なくなります。
外部データソースにアクセスするとき、LINQとサポートコンポーネントは、.NET言語自体内の埋め込みクエリ言語とデータマッピングの必要性を取り除きます。 データマッピングを実行するために、LINQはLINQプロバイダーと呼ばれるコンポーネントに依存しています。 LINQ-to-Objectsは、LINQが.NETコレクションにアクセスできるようにするストックプロバイダーです。 同様に、リレーショナルデータベースとXMLドキュメントにアクセスするプロバイダーがあります。 これらのプロバイダーのほとんどは、.NET Frameworkに含まれていないサードパーティのコンポーネントです。 使用されるプロバイダーに関係なく、すべてのクエリは同じLINQ構文を使用します。
言語統合クエリ構文とプロバイダーの間には、LINQ機能の一部として.NET Frameworkに追加されたクエリ演算子のライブラリがあります。 これらの演算子は、フィルタリング、順序付け、集合論演算、集計などのタスクを実行します。 これらの演算子は.NET Frameworkの一部であるため、開発者が選択した場合、LINQなしでも使用できます。