LINQ to Entities に次のクエリがあります。
var query = from p in db.Products
where p.Price > 10M
select p;
この時点ではクエリは実行されていません。いくつかの条件に基づいて true/false を返すクエリを書きたいと思います。
return query.Any(p => p.IsInStock &&
(p.Category == "Beverage" ||
p.Category == "Other"));
これは正常に機能します。ただし、コードを再利用したいと考えています。カテゴリが飲料であるかその他であるかに基づいてフィルタリングする必要がある多くのメソッドがあるため、デリゲートを作成してみました。
Func<Product, bool> eligibleForDiscount = (product) => product.Category == "Beverage" || product.Category == "Other";
インライン チェックをデリゲートに置き換えたかったのです。
return query.Any(p => p.IsInStock && eligibleForDiscount(p));
これにより、LINQ to Entities が Invoke をサポートしていないというエラーが表示されます。このようなデリゲートの代わりにインライン コードを使用できないのはなぜですか? 他の方法で再利用を実現する方法はありますか?