統合言語クエリ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

統合言語クエリ (LINQ, Language INtegrated Query, リンクと発音する)とは、.NET Framework 3.5において、様々な種類のデータ集合に対して標準化された方法でデータを問い合わせることを可能にする、言語に統合された機能のことである。開発ツールはVisual Studio 2008から対応している。

LINQをサポートする言語には標準クエリ演算子(standard query operators)が定義され、異なる種類のデータ集合に対して共通の構文でフィルタ・列挙・射影などの処理を行うことができる。

[編集]

fromからselectまでの一連の式がLINQクエリ式である。このコードでは、fruitsの中からmで始まるものを取り出し、それをretに格納し、それをforeachで順に出力している(実際にはretは遅延評価される)。

string[] fruits =
{
    "apple",
    "cherry",
    "melon",
    "orange",
    "marron",
    "mango",
};
var ret = from x in fruits
          where x[0] == 'm'
          select x;
foreach (var e in ret)
{
    Console.WriteLine(e);
}

言語仕様[編集]

LINQに対応する言語は、LINQ の能力をより発揮させるために新しい言語仕様が併せて導入されている。例えば、クエリ式、拡張メソッド、ラムダ式、匿名型などがそうである。C# における例は C# 3.0からの仕様 を参照されたい。

データソース[編集]

LINQはサードパーティによるものを含め、あらゆる種類のデータソースに対して適用することができる。これは、標準クエリ演算子に対応する機能を拡張メソッドとしてデータソースに追加することで実現している。

従来では同種のデータ型やオブジェクトの集合に対して列挙やソート、フィルタを効率的に扱うために配列 (Arrayクラス) やコレクションオブジェクトが用いられた。一方、データベースXML上のデータ集合はADO.NETによってデータセットとして取り扱われており異なる操作が必要であった。LINQによって、これらのオブジェクトやデータセットを区別せず共通的に扱うことが可能となった。他言語と比較すると、RubyActive Recordの組み合わせではこのようなコレクションの取り扱いに優れており、これへの対抗を意識した言語拡張であるものと考えられる[要出典]

例えば、マイクロソフトによるものでは次のような実装がある。

  • LINQ to Objects (あらゆるコレクション/列挙子をLINQクエリで操作可能にする)
  • LINQ to XML (XLinq)
  • LINQ to ADO.NET
    • LINQ to SQL (DLinq / SQL Server専用)
    • LINQ to Entities (SQL Setrver / ORACLE / MySQL / SQLite等)
    • LINQ to DataSet (DataSetに対する拡張メソッドにより、LINQクエリを記述可能とする)
  • Azure Table Storage (Windows AzureのキーバリューストアでLINQクエリを記述可能とする)

サードパーティ製データソースとしては、以下が挙げられる。

LINQに対応する言語[編集]

次の言語がLINQに対応する。

C++/CLIはLINQに対応する予定はなく、従来通りの構文でLINQ関係のライブラリを使用できるのみである。

その他の言語での実装[編集]

LINQは、LINQの思想に感化された人々により、マイクロソフト系のプログラミング言語にとどまらず、さまざまなプログラミング言語向けの実装が行われている。

外部リンク[編集]