我有这段代码:
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
的文档,但感觉有点混淆。我有一种感觉,这可能与我正在将谓词连接在一起有关吗?
true && (x.value1 == "1") && (x.value2 == "2")
的表达式,这取决于您的项目是否能评估为true
或false
(因此您会得到“您期望的结果”,无论那是什么)。另一方面,如果您从false
开始,则该表达式永远无法评估为true
,因为将false
进行且运算的结果是false
。因此,对于所有项目,谓词表达式都返回false
,您不会得到任何结果。 - O. R. Mapper