MongoDBをC#から使う その3。今回はLinq。なんだけど、Linq使うのは色々準備しないとだめですね。 とりあえずソース。

//ためしドキュメント用のクラス
public class LinqTest
{
    public ObjectId Id { get; set; }
    public int 連番 { get; set; }
    public string ボディ { get; set; }
}

public void LinqTest()
{
    string connectionString = "mongodb://localhost";
    MongoClient client = new MongoClient(connectionString);
    var database = client.GetDatabase("foo");
    var collection = database.GetCollection("LinqTest");

    //ためし用コレクションの作成
    List documents = new List();
    for (int i = 0; i < 100; i++)
    {
        documents.Add(
                new LinqTest{連番 = i, ボディ = i.ToString()}
            );
    }
    collection.InsertMany(documents);

    //Linqでfind
    var query =
            from x in collection.AsQueryable()
            where x.連番 == 10
            select x;

    foreach (var tmp in query)
    {
        Console.WriteLine("{0} : {1}",tmp.連番,tmp.ボディ);
    }
}

Linqで検索はもちろん便利なんだけど、動的なWhere句作ったりが割と大変。 あと、本当に出来ないとなると、割と致命的なのがBsonDocumentの検索がLinqだとできないっぽい? あんま調べてない。海外のサイトでもちらほら質問が出てるけど、どれも解決してないっぽい。 知ってる人いたら教えてください。要調査と実験。

で、Linqは便利だけど、そのままだとどうしても動的な条件がやりづらい。なので、いろいろ準備してあげる必要あり。それはまた今度。次は性能面を見る。