統合言語クエリ
統合言語クエリ (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によって、これらのオブジェクトやデータセットを区別せず共通的に扱うことが可能となった。他言語と比較すると、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に対応する言語[編集]
次の言語がLINQに対応する。
- C# 3.0
- F# 1.1.8.1
- Visual Basic 9.0
- Delphi Prism 2009 (Oxygene)
C++/CLIはLINQに対応する予定はなく、従来通りの構文でLINQ関係のライブラリを使用できるのみである。
その他の言語での実装[編集]
LINQは、LINQの思想に感化された人々により、マイクロソフト系のプログラミング言語にとどまらず、さまざまなプログラミング言語向けの実装が行われている。
- jLinq - JavaScriptでの実装
- JSINQ - JavaScriptでの実装
- linq.js - JavaScriptでの実装
- Chris Pietschmann's LINQ to JavaScript - JavaScriptでの実装
- PHPLinq - PHPでの実装
- Quaere - Javaでの実装
- JaQue - Javaでの実装.
- JaQu - Javaでの実装
- Querydsl - Javaでの実装
- pynq - Pythonでの実装
外部リンク[編集]
|
||||||||||||||||||||