在我见过的谓词构建器的所有示例中,如果您正在构建" and“表达式条件,它将显示一个以PredicateBuilder.True开头的表达式;如果您正在构建"or”表达式条件,它将显示一个以PredicateBuilder.False开头的表达式。
我的问题是,这是不是一直都是这样,如果是这样,为什么不能简单地推断出来。我怀疑在某些情况下,您正在构建一个" and“表达式,并希望以false开头。而"or“则相反。
有人能给我解释一下吗?
发布于 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(...))。
https://stackoverflow.com/questions/9332489
复制相似问题