PredicateBuilder を使用して、特定のレコードのセットがすべて Expression 内に存在するかどうかを判断する方法を理解しようとしています。したがって、仕様として OrderId と ProductId のリストが与えられた場合、Order の OrderDetail レコードにすべての仕様項目が含まれているかどうかを知りたいと思います。それらの1つまたは一部だけではなく、それらすべてです。
だから私はできる:
var inner = PredicateBuilder.False<OrderDetail>();
foreach (int spec in specs)
{
temp = spec;
inner = inner.Or(d => d.ProductId == temp);
}
var outer = PredicateBuilder.True<OrderDetail>();
outer = outer.And(d => d.OrderId == orderId);
outer = outer.And(inner);
しかし、結果を取得した後、a) 重複を排除し (私の場合、複数の OrderDetails が同じ ProductId を持つ可能性があるため)、b) 結果のカウントを仕様のカウントと比較する必要があります。これはすべて Expression の外で実行できますが、結果がブール値になるように Expression 内のすべてを評価するエレガントな方法はありますか?
つまり、式を自己完結型にして、そのまま渡すことができるようにしたいと思います。また、それを渡す人は、それが真かどうかを判断するために「後処理」を行う方法を知る必要がありません。 .