Reputation: 376
I wonder how to build complex query using mongo driver. This is my query:
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();
With EF
IQueryable
this code is working fine, but I can't build correct query with mongo driver
.
Could anyone told me what am I doing wrong?
Upvotes: 0
Views: 3705
Reputation: 10222
Knowing what the finalExpression
is would help, in case the problem is there. In my opinion, there might be a problem with mongodb driver's translation of !(x.Promo == null && x.Promo == string.Empty)
Could you try the following code instead of yours and see if it will make a difference
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();
Upvotes: 5