いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

C#3.0の追加機能-05(LINQ-01 (クエリの基本))


C# 3.0からLinqがサポートされるようになりました。
Linqについては、あちこちで話題になっているので
わざわざここで書く必要はないのですが、備忘録ということで
メモしていきます。


今回は、もっとも基本的なクエリの発行の仕方。
基本的に、Linqでクエリを行う場合は以下の手順を踏む必要があります。

  1. データソースを取得
  2. クエリを構築
  3. クエリを実行

そのままですね。
また、クエリを行えるオブジェクトは以下のものとなります。

IEnumerableをサポートしているオブジェクト

実は、ジェネリックではないIEnumerableの場合もクエリ可能ですが
それは次回に書きます。


で、以下サンプルです。

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:
using System;
using System.Linq;

namespace Gsf.Samples.Tmp{

    class LinqSample1{

        static void Main(){

            string strings = new string{"hoge", "hehe", "fuga"};

            //
            // クエリの構築.
            //
            // 配列は、IEnumerableをサポートしているのでクエリ可能。
            // (.NET Framework 2.0以降)
            //
            var query = 
                from   str in strings
                where  str.StartsWith("h")
                select str;

            //
            // クエリの実行.
            //
            foreach(string str in query){
                Console.WriteLine(str);
            }
        }
    }
}


サンプルも見たままなので、解説などはいらないですが
一つだけ注意点。

Linqクエリは、構築した時点ではまだ実行されていません。
つまり上記の

var query =
    ...

の時点ではクエリが構築されただけで実行はされていません。
Linqは基本的に遅延評価を行います。

実行が実際に行われるのはforeachにてループする際です。
また、一度つかったら終わりというわけでもなく、foreachにて実行
するたびに検索が行われます。