当使用PredicateBuilder
增量构建 0 个或多个条件的谓词时,从可以添加的“中性”谓词开始是很方便的,因为您可以只遍历条件,and
或者or
将它们与最后一个条件一起迭代。例如
var predicate = PredicateBuilder.True<Value>();
foreach (var item in itemsToInclude) {
predicate = predicate.And(o => o.Items.Contains(item));
}
这相当于更直接的布尔逻辑:
var predicate = true;
foreach (var item in itemsToInclude) {
predicate = predicate && o.Items.Contains(item);
}
这相当于
true && ((o.Items.Contains(itemsToInclude[0] && o.Items.Contains.itemsToInclude[1]) ...)
或true && restOfPredicate
,其计算结果为true
ifrestOfPredicate
为真,并且false
ifrestOfPredicate
为false
。因此,为什么它被认为是中立的。
然而,从 开始PredicateBuilder.False
,将是等价false && restOfPredicate
的,它总是评估为false
。
同样,对于or
,开始于false
将等价于false || restOfPredicate
,其计算结果为false
if restOfPredicate
isfalse
和true
if restOfPredicate
is true
。并且true || restOfPredicate
总是评估为true
.
底线:使用和PredicateBuilder.True
用作中性起点。PredicateBuilder.And
PredicateBuilder.False
PredicateBuilder.Or