如何PredicateBuilder用于将带有嵌套 AND 的多个语句或在一起,而不去除括号?
我们试图得到:
(fieldA = X AND fieldB = Y AND fieldC = Z) or (fieldA = A AND fieldB = B and fieldC = C)
但是下面的代码生成了(注意没有括号,意思是数据库查询返回了错误的数据)
fieldA = X AND fieldB = Y AND fieldC = Z or fieldA = A AND fieldB = B and fieldC = C
我们正在像这样构建谓词:
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);
最佳答案
在 LINQ 和 SQL Server 中(我很肯定这也是 MySQL、Oracle 和其他数据库的情况),先评估 AND 运算符,然后再评估 OR 运算符。
所以
(fieldA = X AND fieldB = Y AND fieldC = Z) or (fieldA = A AND fieldB = B and fieldC = C)
与
相同fieldA = X AND fieldB = Y AND fieldC = Z or fieldA = A AND fieldB = B and fieldC = C
关于c# - PredicateBuilder 剥离括号,打破嵌套的 AND 与 OR 的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20063539/