Assume something like a nested expression
where a = 1 AND ( b = 4 OR b = 5 )
How to use multiple Builders objects and build a complete filter out of such an expression?
Assume something like a nested expression
where a = 1 AND ( b = 4 OR b = 5 )
How to use multiple Builders objects and build a complete filter out of such an expression?
Builders is really flexible class, it also has overridden operators "& = AND" and "| = OR"
Your example will be
var filter = Builders<User>.Filter.Eq(x => x.A, "1");
filter &= (Builders<User>.Filter.Eq(x => x.B, "4") | Builders<User>.Filter.Eq(x => x.B, "5"));
if you want conditionally add more filters use this method:
var builder = Builders<Student>.Filter;
var filter = builder.Empty;
if (!string.IsNullOrWhiteSpace(firstName))
{
var firstNameFilter = builder.Eq(x => x.FirstName, firstName);
filter &= firstNameFilter;
}
if (!string.IsNullOrWhiteSpace(lastName))
{
var lastNameFilter = builder.Eq(x => x.LastName, lastName);
filter &= lastNameFilter;
}
if (minAge != null && maxAge != null)
{
var ageFilter = builder.And(builder.Gt(x => x.Age, minAge),
builder.Lt(x => x.Age, maxAge));
filter &= ageFilter;
}
var result = await _plpResultCollection.Find(filter).ToListAsync();
You can use very simply like this way.....
var filter = Builders<Rental>.Filter.Where(s => s._id== id && s.Price==1500);