首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PredicateBuilder<True>和PredicateBuilder<False>的区别是什么?

PredicateBuilder<True>和PredicateBuilder<False>的区别是什么?
EN

Stack Overflow用户
提问于 2013-05-22 23:15:18
回答 2查看 6.7K关注 0票数 14

我有代码:

代码语言:javascript
复制
   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谓词的事实有关?

EN

回答 2

Stack Overflow用户

发布于 2017-09-27 06:33:50

当使用PredicateBuilder增量地构建一个包含0个或更多条件的谓词时,从一个可以添加到其中的“中性”谓词开始是很方便的,因为您可以只迭代这些条件,然后将它们与最后一个条件放在一起( andor )。例如。

代码语言:javascript
复制
var predicate = PredicateBuilder.True<Value>();

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

这相当于更直接的布尔逻辑:

代码语言:javascript
复制
var predicate = true;

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

这将等同于

代码语言:javascript
复制
true && ((o.Items.Contains(itemsToInclude[0] && o.Items.Contains.itemsToInclude[1]) ...)

true && restOfPredicate,如果restOfPredicate为true,则计算结果为true;如果restOfPredicatefalse,则计算结果为false。这就是为什么它被认为是中立的。

然而,从PredicateBuilder.False开始,将等同于false && restOfPredicate,它的计算结果始终为false

类似地,对于or,从false开始将等同于false || restOfPredicate,如果restOfPredicatefalse,则计算结果为false,如果restOfPredicatetrue,则计算结果为true。而true || restOfPredicate的计算结果总是为true

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

票数 11
EN

Stack Overflow用户

发布于 2017-09-27 05:27:33

它的工作原理True和false方法没有什么特别之处:它们只是创建初始计算结果为true或False的Expression>的便捷快捷方式。因此,如下所示:

var predicate = PredicateBuilder.True ();只是一个快捷方式:

Expression> predicate =c => true;当您通过重复堆叠和/或条件来构建谓词时,起点分别为true或false是很有用的。

信息完成http://www.albahari.com/nutshell/predicatebuilder.aspx

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16695523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档