今回は予定を変えてLinqのクエリ式の構文について説明します。前回クエリの方法について説明しましたが、クエリ式の構文についての説明はしていなかったので、前回説明した基本的なクエリ式の構文について説明します。
基本的なクエリ
Linqでの基本的なクエリ式は以下のようになります。
from [範囲変数] in [データソース] select [範囲変数]
まず、クエリ式はfrom句から始める必要があります。つぎに最低でもselect句で範囲変数を指定し、最終的に式が返すソースシーケンスの内容を確定します。
from句
from [範囲変数] in [データソース]
from句ではクエリもしくはサブクエリの対象となるデータソースとソースシーケンス内の各要素を表すローカルの範囲変数を指定します。ソースシーケンスとはデータソースの中でLinq式内での各操作の対象となる連続したデータのことです。
LinqのデータソースにはIEnumerable<T>インターフェイスあるいはIEnumerableとその派生インターフェイスを実装したオブジェクトだけを指定することができます。通常の配列やArrayList、ADO.NETのデータセットはIEnumerableインターフェイスを持つのでLinqの対象とすることができます。
selsct句
select [式]
selsct句はクエリ式が実行されたときに生成される値の型を指定します。クエリ式の結果はselect句の前の式の評価およびselect句の式の評価によって生成されます。
select句の一番単純な例は式に範囲変数を指定し、ソースシーケンスをそのまま式の値にすることですが、以下の例のようにこの式でデータ変換をすることができます。
XDocument rss = XDocument.Load(@"http://www.isisaka.com/blog/index.xml"); //select句でデータ変換する IEnumerablequery = from x in rss.Element("rss").Elements("channel").Elements("item") select DateTime.Parse(x.Element("pubDate").Value); foreach (var d in query) { Console.WriteLine(d.ToLongDateString()); }
この例では4行のselect句の式でXMLのバリュー(string型)のデータをDateTime型に変換しているので、クエリ式の結果をIEnumerble<DateTime>型の変数に格納することができます。
条件付きクエリ
先ほどのもっとも単純なクエリ式ではソースシーケンスのデータに対し、なんのフィルタリングもかけずに値を返していましたが、実際には何らかのフィルタリング条件をつけて必要なデータだけをソースシーケンスから取り出したいことが多いと思います。
クエリ式において、このフィルタリング条件を指定するのがwhere句です。
from [範囲変数] in [データソース] whewe [条件式] select [式]
この例では7秒目でToListメソッドを使ってLinq式の結果をメモリ上に確定しています。
これの詳しい話についてはMSDNライブラリの「クエリの結果をメモリに格納する (C# プログラミング ガイド)」を参照してください。
それでは、また次回。
コメント
Linq to XML 入門その1 (XML文書の作り方)
準備 これから数回に分けてLinq to XMLの基礎的な使い方についてまとめ…
[…] Liunq to XML 入門 その3 (Linq クエリ構文) […]