はじめてのLINQ

LINQ Previewをダウンロードして実験君。ただ、日本語版VS2005β2には対応していないようなので、コマンドラインからちまちまコンパイルすることに。

using System;
using System.Query;

class Program {
    public static void Main () {
        var src = new int [] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        var dst = from n in src
            where n % 2 == 0
            orderby n descending
            select n;
        foreach (var n in dst)
            Console.WriteLine (n);
    }
}

/* 結果
8
6
4
2
 */

さっくり動きますね。なんだか凄そうに見えますが、コイツをC#2.0のコードで書くと、

using System;
using System.Query;

class Program {
    public static void Main () {
        int src = new int  { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        OrderedSequence<int> os = 
            Sequence.OrderByDescending<int, int>(
                    Sequence.Where<int>(src, delegate (int n) { return n % 2 == 0; }), 
                    delegate (int n) { return n; });
        foreach (int n in os)
            Console.WriteLine (n);
    }
}

意外と単純。イメージ的にはUnixのパイプに近いかな。

$ from n in src | where | orderby | select > dst

↑こんなのを想像してみてください。

そーいや、queryの並びがSQLと異なって(selectが最後に来ている)いますが、これについてヘジたんがビデオでコメントしていたけど、VB9のLINQってSQLの並びなんですよね。この辺は統一取れてないのかしら?(^^;