がりらぼ

WindowsRuntimeの応援ブログ

LINQ星人になってみた

Language Integrated Query(統合言語クエリ)とはプログラム言語内でクエリ式が使えるという便利らしいアレで、使い過ぎるとLINQ星人になってしまうとか。
いつもはLINQ to XMLにお世話になってますが、再入門します。

とりあえず使ってみる。

var dataSource = new[]{
                new{number=1,name="吉田",age=32},
                new{number=7,name="田中",age=25},
                new{number=8,name="佐々木",age=44},
                new{number=5,name="筒井",age=33},
                new{number=3,name="鈴木",age=21},
                new{number=6,name="中田",age=10},
                new{number=2,name="小西",age=87},
                new{number=4,name="山田",age=22},
            };

            //LINQクエリ式
            var orderNumber = from p in dataSource where p.number > 0 orderby p.number select p.name;

            foreach (var i in orderNumber)
            {
                Console.WriteLine(i);
            }

出力結果は番号順に名前が出力されます。
from→データソースの指定
where→検索条件
orderby→ソート順
select→指定
この場合はorderbyで番号順にソートしてますね。

//LINQクエリ式
var orderNumber = from p in dataSource where p.age==10 orderby p.number select p.name;

こうするとwhereでageプロパティが10のものだけの条件を与えているので、age=10となっている人の名前が番号順に出てくることとなります。

結局クエリ式もコンパイル時にはラムダ式とメソッドに変換されます。(メソッドチェイン)

//クエリではなくラムダ式でも記述できるっていうかコンパイル時に変換されるらしい
var orderNumber = dataSource.Where(p => p.age == 10).Select(p=>p.name);

LINQ星人はこちらをつかうことのほうが多いらしいです。

今のところLINQ to XMLとかLINQ to SQLでしかお世話になってないですけどRXを使い始めると本領が発揮されるらしいです。