山傘のプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

実践で役立つ C#プログラミングのイディオム/定石&パターン その5

Chapter3 ラムダ式LINQ の基礎

Chapter 3 の続きです。LINQ を使って、データに対する問い合わせ処理を簡単に記述することができます。

LINQ to Objects

    class Program2
    {
        static void Main(string[] args)
        {
            var names = new List<string>
            {
                "Tokyo", "Kanagawa", "Saitama", "Chiba",
            };
            IEnumerable<string> query = names.Where(s => s.Length <= 5);
            foreach (string s in query)
            {
                Console.WriteLine(s);
            }
        }

    }

メソッドチェーンを適用させることもできます。

            IEnumerable<string> query = names.Where(s => s.Length <= 5)
                                             .Select(s => s.ToUpper());

注意として、クエリ演算子の中で遅延実行とされるものは、検索は値が必要となるときに実行されるということです。

遅延実行
    class Program2
    {
        static void Main(string[] args)
        {
            var names = new List<string>
            {
                "Tokyo", "Kanagawa", "Saitama", "Chiba",
            };
            IEnumerable<string> query = names.Where(s => s.Length <= 5)
                                             .Select(s => s.ToUpper());
            foreach (string s in query)
            {
                Console.WriteLine(s);
            }

            names[0] = "kyoto";
            foreach (string s in query)
            {
                Console.WriteLine(s);
            }

        }
    }
出力
TOKYO
CHIBA
KYOTO
CHIBA

感想

LINQ を使ってみて思ったんですが、Ruby でも似たようなことをしていたなと気づかされました。