首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PredicateBuilder和/或

PredicateBuilder和/或
EN

Stack Overflow用户
提问于 2012-02-18 01:05:23
回答 1查看 1.8K关注 0票数 3

在我见过的谓词构建器的所有示例中,如果您正在构建" and“表达式条件,它将显示一个以PredicateBuilder.True开头的表达式;如果您正在构建"or”表达式条件,它将显示一个以PredicateBuilder.False开头的表达式。

我的问题是,这是不是一直都是这样,如果是这样,为什么不能简单地推断出来。我怀疑在某些情况下,您正在构建一个" and“表达式,并希望以false开头。而"or“则相反。

有人能给我解释一下吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-15 04:12:13

在表达式A和B以及C和D中,如果条件(A、B、C或D)中的任何一个为假,则整个表达式为假。因此,如果" AND“表达式以False开头,那么无论您和它的其他内容是什么,整个表达式都将是False。

与"or“表达式相同。在表达式A或B或C或D中,如果条件(A、B、C或D)中的任何一个为True,则整个表达式为True。因此,如果你以True开始一个" OR“表达式,不管你对它做了什么”或“运算,整个表达式都将是True。

至于为什么需要以字面上的True或False作为PredicateBuilder的开头,我相信这只是一个让使用PredicateBuilder更容易的约定。您的表达式始终以(布尔)条件开头,后跟0个或更多“和/或条件”部分。所以你可以有"A",或者"A和B",或者"A和B和C“。你永远不能以"and A“开头。PredicateBuilder的条件(.And)将"and condition“添加到表达式中,因此您不能以它开头。可能有一个构造器可以让你创建你的表达式并用一个初始条件开始它(新的Expression<...>(A)?我还没检查过..。有吗?)但是,您必须以不同的方式处理第一个条件(可能是循环遍历一些对象集合并添加到表达式中)(调用构造函数)和处理第二个及后续条件(调用.And(...) )。或.Or(...))。PredicateBuilder的.True<...>()和.False<...>()方法处理表达式的创建以及添加第一个(泛型)条件,以便您可以在循环中添加第一个和所有后续条件(通过调用.And(...)或.Or(...))。

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

https://stackoverflow.com/questions/9332489

复制
相关文章

相似问题

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