アプリケーション全体のさまざまなクエリで発生する特定の基準セットは、徐々に複雑になってきています。このコードの重複を避けるために、条件をExpressionとして返すメソッドにこれらの条件を分割し、必要に応じて適用できるようにします。
public Expression<Func<Invoice, bool>> GetComplexPredicate()
{
// complex predicate is returned as an Expression:
return c => ...
}
そのように再利用されます:
var result = repository.Invoice.Where(GetComplexPredicate())
ただし、c.Invoiceは単なるICollectionであるため、以下のステートメントはコンパイルされません。
var result = repository.Customer
.Where(c => c.Country == "US" && c.Invoice.Any(GetComplexPredicate()))
このような表現をどのように使用することは可能なのでしょうか?