アットウィキロゴ

Language Integrated Query(LINQ)

.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 の能力をより発揮させるために新しい言語仕様が併せて導入されている。例えば、クエリ式、拡張メソッド、ラムダ式、匿名型などがそうである。

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

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

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

  • LINQ to ADO.NET
 ・LINQ to SQL (DLinq)
 ・LINQ to Entities
 ・LINQ to DataSet
  • LINQ to XML (XLinq)
  • LINQ to Objects

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

  • C# 3.0
  • F# 1.1.8.1(2008年10月にできたらしい)
  • Visual Basic 9.0(?w)

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


最終更新:2009年04月07日 15:00