統合言語クエリ統合言語クエリ (Language INtegrated Query; LINQ, リンクと発音する) とは、.NET Framework 3.5において、様々な種類のデータ集合に対して標準化された方法でデータを問い合わせること(クエリ)を可能にするために、言語に統合された機能のことである。開発ツールはVisual Studio 2008から対応している。 統合言語問合せという表記も見られる[1]:43。 例C#による例を示す。このコードでは、 using System;
using System.Linq; // LINQ拡張メソッドの利用に必要。メソッド構文ではなくクエリ構文を使用する場合でも必要となる。
public class Test
{
public static void Main()
{
string[] fruits =
{
"apple",
"cherry",
"melon",
"orange",
"marron",
"mango",
};
// クエリ構文
Console.WriteLine("Query Syntax");
{
// fromからselectまでの一連の式がLINQクエリ式である。
var ret = from x in fruits
where !string.IsNullOrEmpty(x) && x[0] == 'm'
select x;
foreach (var e in ret)
{
Console.WriteLine(e);
}
}
// メソッド構文
Console.WriteLine("Method Syntax");
{
// オブジェクトをフィルタリングする条件(述語)を、ラムダ式で指定する。
var ret = fruits.Where(x => !string.IsNullOrEmpty(x) && x[0] == 'm');
foreach (var e in ret)
{
Console.WriteLine(e);
}
}
}
}
言語仕様LINQに対応する言語は、LINQを自然に導入するための新しい言語仕様が併せて追加されている。代表的な例を以下に示す。
C#における仕様の詳細はC# 3.0からの仕様を参照されたい。 標準クエリ演算子主な標準クエリ演算子を挙げる。 制限演算子
プロジェクション演算子
結合演算子
順序付け演算子
グループ化演算子
集計演算子
データソースLINQはサードパーティーによるものを含め、あらゆる種類のデータソースに対して適用することができる。これは、標準クエリ演算子に対応する機能を拡張メソッドとしてデータソースに追加することで実現している。 従来では同種のデータ型やオブジェクトの集合に対して列挙やソート、フィルタを効率的に扱うために配列 (Arrayクラス) やコレクションオブジェクトが用いられた。一方、データベースやXML上のデータ集合はADO.NETによってデータセットとして取り扱われており異なる操作が必要であった。LINQによって、これらのオブジェクトやデータセットを区別せず共通的に扱うことが可能となった。 例えば、マイクロソフトによるものでは次のような実装がある。
サードパーティー製データソースとしては、以下が挙げられる。
LINQに対応する言語次の言語がLINQに対応する。
C++/CLIはLINQに対応する予定はなく、従来通りの構文でLINQ関係のライブラリを使用できるのみである。 その他の言語での実装LINQは、LINQの思想に感化された人々により、マイクロソフト系のプログラミング言語にとどまらず、さまざまなプログラミング言語向けの実装が行われている。
注釈
出典参考文献
外部リンクInformation related to 統合言語クエリ |