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」したり、「ed」したりしますか?