2016-08-02 14 views
0

我目前工作中的代码使用C#蒙戈司机和我做很多简单的东西像这样从列表中获取结果<IMongoQuery>

var query = Query.EQ("SomeBooleanField", false); 
return Collection.FindAs<MyType>(query); 

我必须写一个查询是动态的要求,即AND子句的数量不同。所以我使用的是这样的 -

var andList = new List<IMongoQuery>(); 
if (whatever) 
    andList.Add(Query.EQ("Field1", true)); 

if (suchandsuch) 
    andList.Add(Query.EQ("Field2", false)); 

var query = new QueryBuilder<MyType>(); 
query.And(andList); 

所以我的问题是,我该怎么才能得到一些结果了它与查询吗?我想要一个列表或IEnumerable。

我在网上找不到任何有用的示例,驱动程序文档不是太有用。任何帮助感激地赞赏。

+0

你可以发表你的整个代码。你不能把'查询'放在一个集合中。查找(查询).ToListAsync(); ?? – Newton

+0

嗨,由于客户端的IP问题,无法发布代码。但是,如果我这样做 - var query = new QueryBuilder (); query.And(andList); return Collection.FindAs (query); 我收到一个错误 - MongoDb.Driver.Builders.QueryBuilder 不能分配给参数类型'MongoDb.Driver.IMongoQuery'。 ...(也是我正在使用的'Collection'变量没有'Find'方法)。 – EyeHefBee

+0

我已经在答案中发布了示例代码。请对此评论 – Newton

回答

0

你试过下面这种格式

var collection = _database.GetCollection<BsonDocument>("MyCollection"); 
var builder = Builders<BsonDocument>.Filter; 
var filter = builder.Eq("param1", "value1") & builder.Eq("param2", "value2"); 
var result = await collection.Find(filter).ToListAsync(); 

你得到一个错误,因为你不能使用FindAS <>()是这种情况下

+0

在我原来的文章中,我正在使用的'Collection'变量没有'Find'方法。 当我尝试上面的代码时,它告诉我'filter'是一个FilterDefinition,我试图将它传递给Find(),其中Find()期待IMongoQuery。 – EyeHefBee