我正在尝试在我的 EF 过滤代码中使用谓词。
这有效:
IQueryable<Customer> filtered = customers.Where(x => x.HasMoney && x.WantsProduct);
但是这个:
Predicate<T> hasMoney = x => x.HasMoney;
Predicate<T> wantsProduct = x => x.WantsProduct;
IQueryable<Customer> filtered = customers.Where(x => hasMoney(x) && wantsProduct(x));
运行时失败:
The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
我不能使用第一个选项,因为这是一个简单的示例,实际上,我正在尝试将一堆谓词组合在一起(使用 and、not、or 等)来实现我想要的。
如何让 EF Linq 提供程序“理解”我的谓词?
如果我使用Func<T, bool>
. 它适用于Expression<Func<T>>
,但我无法将表达式组合在一起进行复杂过滤。如果可能的话,我宁愿避免使用外部库。
更新:
如果无法做到这一点,我有什么选择?也许表达式被组合/或'ed/and'ed以某种方式达到相同的效果?