LINQのおべんきょ

まずは普通に。

class Program
{
  static void Main(string[] args)
  {
    var kvpList = new List<KeyValuePair<string, int>>() {
      new KeyValuePair<string,int>("Taro",27)
      , new KeyValuePair<string,int>("Jiro",25)
      , new KeyValuePair<string,int>("Saburo",23)
    };

    var query = from item in kvpList
                where item.Value < 26
                select item;

    foreach (var item in query)
    {
      Console.WriteLine(item);
    }

    Console.ReadKey();

  }
}

このコード中のクエリ式

    var query = from item in kvpList
                where item.Value < 26
                select item;

は、メソッド構文に直すと

    var query = kvpList
      .Where(item => item.Value < 26)
      .Select(item => item)
      ;

と書ける。

さらに、Where、Selectメソッドのパラメータのラムダ式はFuncデリゲートのSyntax Sugarだから、匿名メソッドを使って

    var query = kvpList
      .Where(delegate(KeyValuePair<string, int> item) { return item.Value < 26; })
      .Select(delegate(KeyValuePair<string, int> item) { return item; })
      ;

と直せる。

こうやって見ると、クエリ式がいかにすっきりしてるか分かるね。