2016-07-13 19 views
1

このドキュメントでは、フィルタの定義方法について説明しますが、フィルタの使用方法は示していません。C#MongoDBドライバは強く型付けされたフィルタの使用

public class Widget : BsonDocument 
{ 
    [BsonElement("X")] 
    public int X { get; set; } 

    [BsonElement("Y")] 
    public int Y { get; set; } 
} 

public MyItem Get() 
{ 
    MyItem retvalue = null; 

    var builder = Builders<BsonDocument>.Filter; 
    var filter = builder.Eq("x", 10) & builder.Lt("y", 20); 
    Console.WriteLine(_collection.Count(filter)); 

    var builder2 = Builders<Widget>.Filter; 
    var filter2 = builder2.Eq(widget => widget.X, 10) & builder2.Lt(widget => widget.Y, 20); 
    Console.WriteLine(_collection.Count(filter2)); 

    return retvalue; 
} 

だから、最初のフィルターが働いている - しかし、それは強く型付けされたないです。

第2のフィルタは、そのように使用することはできません。
コンパイラエラー:が「MongoDB.Driver.FilterDefinition」

に「MongoDB.Driver.FilterDefinition」から変換することはできませんので、質問です - どのように私はこれをフィルタとして使用します。明らかに、filterパラメータはFilterDefinitionとして定義されています。 MyItemをBsonDocumentから派生させることは役に立たなかった。 "filter2.ToBsonDocument()"はコンパイルされますが、正しい結果が得られません(フィルタは機能しません)。

誰かが私を正しい方向に向けることができますか?
それについて私が読むことのできる場所は?

+0

が使用されて? – profesor79

答えて

1

まず、クエリを操作する便利な方法であるクエリ可能として使用することをお勧めします。

_result = _collection.AsQueryable().First(w => w.X == x && w.Y < y); 

またはフルバージョン

_result = _collection 
      .Find(new ExpressionFilterDefinition<Widget> 
       (widget => widget.X == 10 && widget.Y < y)) 
      .First() 

発現フィルタ定義を使用してgithub

にどのドライババージョンC#ドライバ参照here

+0

私にExpressionFilterDefinitionを指摘していただきありがとうございます。それは動作します。また、_database.GetCollection * *があるかどうかもわかりません – lapsus

関連する問題