How can PredicateBuilder be used to OR together several statements with nested AND's, without stripping brackets?
We are trying to get:
(fieldA = X AND fieldB = Y AND fieldC = Z) or (fieldA = A AND fieldB = B and fieldC = C)
But the code below generates (note no brackets, meaning DB query returns wrong data)
fieldA = X AND fieldB = Y AND fieldC = Z or fieldA = A AND fieldB = B and fieldC = C
We are building the predicate like this:
var predicate = PredicateBuilder.False<MonitoredService>();
foreach (var a in affected)
{
var a1 = a;
predicate = predicate.Or(m => m.ItemId == a1.ItemId && m.MinSeverity <= a1.Severity && m.LastUpdatedUtc <= a1.LastModifiedUtc);
}
var monitors = _monitoredServiceRepository.List(predicate);
In LINQ and SQL Server (and i'm positive that this is also the case for MySQL, Oracle and other DBs), AND operators are evaluated first before OR operator.
So
(fieldA = X AND fieldB = Y AND fieldC = Z) or (fieldA = A AND fieldB = B and fieldC = C)
Is same as
fieldA = X AND fieldB = Y AND fieldC = Z or fieldA = A AND fieldB = B and fieldC = C
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With