PredicateBuilder和或或

时间:2012-02-17 17:05:23

标签: predicatebuilder linqkit

在我看到的谓词构建器的所有示例中,如果要构建“和”表达式条件,则显示带PredicateBuilder.True的起始表达式;如果要构建“或”表达式,则显示PredicateBuilder.False标准。

我的问题是,这种情况总是如此,如果是这样的话,为什么不能简单地推断出这一点。我怀疑必定会有一些情况,你正在构建一个“和”表达式,并希望从错误开始。与“或”

相反

任何人都可以向我解释这个吗?

1 个答案:

答案 0 :(得分:7)

在表达式A和B以及C和D中,如果任何条件(A,B,C或D)为False,则整个表达式为False。因此,如果您使用False启动“和”表达式,无论您还是其他任何内容,整个表达式都将为False。

与“或”表达式相同。在表达式A或B或C或D中,如果任何条件(A,B,C或D)为True,则整个表达式为True。因此,如果您使用True启动“或”表达式,无论您还是其他什么,整个表达式都将为True。

至于为什么你需要使用文字True或False启动PredicateBuilder,我相信这只是一个使PredicateBuilder更容易使用的约定。表达式总是以(布尔)条件开头,后跟0或更多“和/或条件”部分。所以你可以有“A”,或“A和B”,或“A和B和C”。你永远不会以“和A”开头。 PredicateBuilder的.And(条件)为表达式添加了“和condition”,所以你不能从它开始。可能有一个构造函数让你创建你的表达式并以初始条件启动它(新的表达式< ...>(A)?我还没有实际检查过......有没有?)但是你呢? d必须以不同于你的第二个和后续条件(调用.And(...)或.Or)来处理你的第一个条件(你可能会循环一些东西并添加到你的Expression中)(调用构造函数) (...))。 PredicateBuilder的.True< ...>()和.False< ...>()方法处理创建Expression以及添加第一个(通用)条件,以便您可以处理添加第1个和所有后续条件循环中的条件相同(通过调用.And(...)或.Or(...))。