gpt4 book ai didi

c# - PredicateBuilder 和 PredicateBuilder 之间的区别?

转载 作者:可可西里 更新时间:2023-11-01 09:13:02 24 4
gpt4 key购买 nike

我有代码:

   var predicate = PredicateBuilder.True<Value>();

predicate = predicate.And(x => x.value1 == "1");
predicate = predicate.And(x => x.value2 == "2");

var vals = Value.AsExpandable().Where(predicate).ToList();

如果我有PredicateBuilder.True<Value>() ,它带回了我的期望,但如果我有 PredicateBuilder.False<Value>() , 它带回 0 条记录。有人能解释一下区别是什么以及为什么在一种情况下我得到 0 条记录而在另一种情况下我得到我期望的结果。我已经阅读了 PredicateBuilder文档,但它有点困惑。我有一种感觉,这与我是 Anding 的事实有关。谓词在一起?

最佳答案

使用 PredicateBuilder 时要逐步构建 0 个或多个条件的谓词,从可以添加到的“中性”谓词开始很方便,因为您随后可以遍历条件和 andor他们和最后一个在一起。例如

var predicate = PredicateBuilder.True<Value>();

foreach (var item in itemsToInclude) {
predicate = predicate.And(o => o.Items.Contains(item));
}

这相当于更直接的 bool 逻辑:

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如果restOfPredicate是真的,false如果restOfPredicatefalse .这就是为什么它被认为是中立的。

PredicateBuilder.False 开始, 然而, 将等效于 false && restOfPredicate ,它的计算结果总是 false .

同样适用于 or , 从 false 开始相当于 false || restOfPredicate ,计算结果为 false如果restOfPredicatefalsetrue如果restOfPredicatetrue .和 true || restOfPredicate总是评估为 true .

底线:使用PredicateBuilder.True作为 PredicateBuilder.And 的中立起点, 和 PredicateBuilder.FalsePredicateBuilder.Or .

关于c# - PredicateBuilder<True> 和 PredicateBuilder<False> 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16695523/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com