Liunq to XML 入門 その3 (Linq クエリ構文)

今回は予定を変えて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句でデータ変換する   
IEnumerable query = 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# プログラミング ガイド)」を参照してください。

それでは、また次回。

2 thoughts on “Liunq to XML 入門 その3 (Linq クエリ構文)”

  1. Linq to XML 入門その1 (XML文書の作り方)

    準備 これから数回に分けてLinq to XMLの基礎的な使い方についてまとめ…

コメントを残す