在我为谓词构建器看到的所有示例中,它显示了一个起始表达式,PredicateBuilder.True
如果您正在构建“and”表达式标准,并且PredicateBuilder.False
如果您正在构建“or”表达式标准。
我的问题是,是否总是如此,如果是这样,为什么不能简单地推断出来。我怀疑在某些情况下,您正在构建“and”表达式并希望以 false 开头。而“或”的反义词
谁能给我解释一下?
在我为谓词构建器看到的所有示例中,它显示了一个起始表达式,PredicateBuilder.True
如果您正在构建“and”表达式标准,并且PredicateBuilder.False
如果您正在构建“or”表达式标准。
我的问题是,是否总是如此,如果是这样,为什么不能简单地推断出来。我怀疑在某些情况下,您正在构建“and”表达式并希望以 false 开头。而“或”的反义词
谁能给我解释一下?
在表达式 A 和 B 以及 C 和 D 中,如果任何条件(A、B、C 或 D)为 False,则整个表达式为 False。因此,如果您以 False 开始一个“与”表达式,无论您对它进行什么 AND,整个表达式都将为 False。
与“或”表达式相同。在表达式 A 或 B 或 C 或 D 中,如果任何条件(A、B、C 或 D)为 True,则整个表达式为 True。因此,如果您以 True 开始一个“或”表达式,无论您对它进行什么 OR 操作,整个表达式都将为 True。
至于为什么你需要用文字 True 或 False 来启动 PredicateBuilder,我相信这只是一个让 PredicateBuilder 更容易使用的约定。您的表达式始终以(布尔)条件开头,后跟 0 个或多个“与/或条件”部分。所以你可以有“A”,或者“A and B”,或者“A and B and C”。你永远不会以“and A”开头。PredicateBuilder 的 .And(condition) 将“和条件”添加到表达式中,因此您不能从它开始。可能有一个构造函数让您创建您的表达式并以初始条件启动它(新表达式<...>(A)?我还没有真正检查过......有没有?)但是你会必须治疗你的第一个条件(你' re 可能以不同的方式(调用构造函数)循环遍历某些事物集合并添加到您的表达式中)而不是执行第二个和后续条件(调用 .And(...) 或 .Or(...))。PredicateBuilder 的 .True<...>() 和 .False<...>() 方法处理创建表达式以及添加第一个(通用)条件,以便您可以处理添加第一个和所有后续条件您的循环相同(通过调用 .And(...) 或 .Or(...))。