Following on from a previous question i asked, I’m now trying to figure out how to build dynamic expressions for both AND & OR queries.
Given the following string array:
string[] ranges = new string[]{"0-100", "100-200", "500-1000"};
I would like to dynamically express this in a linq expression – Something along the lines of:
var v = from p in products
where
(p.Amount >= 0 && p.Amount <= 100) ||
(p.Amount >= 101 && p.Amount <= 200) ||
(p.Amount >= 500 && p.Amount <= 1000)
select p;
How do i dynamically build the linq expression in this loop?
string[] ranges = new string[]{"0-100", "100-200", "500-1000"};
var query = products.AsQueryable();
foreach (var item in ranges)
{
int min = int.Parse(item.Split('-').First());
int max = int.Parse(item.Split('-').Last());
//Linq expression?
}
Use predicate builder:
Notice how we start with the boolean state of
false, andortogether predicates in the loop. Conversely, you can start with a state oftrueandandtogether the predicates.Finally, not sure if this is possible with query comprehension syntax, but your ultimate query can then look like: