在执行EF查询时,组合这样的谓词会导致堆栈溢出异常。这有什么问题?
Func<Item, bool> wherePredicate = i => i.isDeleted;
Func<Item, bool> wherePredicate2 = i => i.isExpired;
wherePredicate = i=> wherePredicate(i) || wherePredicate2(i);
答案 0 :(得分:0)
你创建了递归循环,可能是偶然的。 用:
wherePredicate = i=> wherePredicate(i) || wherePredicate2(i);
你只是定义匿名函数,其中i=> wherePredicate(i) (...)
将被调用,因此它将调用自己。诸如“在'='之前的所有内容的所有内容将在分配之前被调用”的常见规则不适用于您可能已经想到的那样,因为函数是分配的内容,而不是结果。
更重要的是(您标记了实体框架) - 它在.Where()
子句中不起作用。简短回答 - EF不知道如何在数据库中调用Func<>
。
答案很长 - 请参阅LINQKit,它将帮助您定义可重用的谓词。奇怪的重合 - 你的问题几乎在“结合表达”部分解释。