2016-03-20 17 views
0

mongoドライバを使用して複雑なクエリを構築する方法を知りました。これは私のクエリです:C#mongoドライバでクエリを作成

var builder = Builders<MongoNavFilter>.Filter; 
var query = builder.Where(x => x.Link == link && x.SubLink == subLink); 
if (some statement) 
{ 
    var finalExpression = ... 
    query = query & Builders<MongoNavFilter>.Filter.Where(finalExpression); 
} 
if (onsale) 
    query = query & Builders<MongoNavFilter>.Filter.Where(x => !(x.Promo == null && x.Promo == string.Empty)); 

var filters = _db.GetCollection<MongoNavFilter>("NavFilters"). 
        Find(query).ToList(); 

EFIQueryableでは、このコードが正常に動作しているが、私はmongo driverで正しいクエリを構築することはできません。 誰かが私に間違っていることを教えてもらえますか?

+0

サンプルMongoDBのドキュメントを使用して記事を更新してください代わりに、あなたの次のコードを試してみて、それが違いを生むだろうかどうだろう!(x.Promo == null && x.Promo == string.Empty)

のMongoDBのドライバの翻訳に問題がある可能性があり。また、「正しいクエリを構築できません」という意味は何ですか?どのようなエラーが出ますか? – Saleem

答えて

1

問題がある場合は、finalExpressionが何であるかを知ることができます。私の意見では、あなたが

var builder = Builders<MongoNavFilter>.Filter; 
var query = builder.Eq(x => x.Link, link) & builder.Eq(x=> x.SubLink, subLink); 
if (some statement) 
{ 
    var finalExpression = ... // write this using the same syntax 
    query = query & filter; 
} 
if (onsale) 
    query = query & builder.Ne(x=>x.Promo, null) & builder.Ne(x=> x. Promo, string.Empty); 

var filters = _db.GetCollection<MongoNavFilter>("NavFilters"). 
       Find(query).ToList(); 
+1

お時間をいただきありがとうございます! –