ユーザーが可能な条件をいくつでも合成できるようにする構成可能なクエリビルダーを構築する必要があります。たとえば、、、、およびの古典的なケースがあるとCustomer
しOrder
ます。ユーザーは、3つを超えるアイテムがあるすべての注文についてレポートを作成できるようにしたいと考えています。または、アイテムが1つだけの注文かもしれません。コンパレータが異なることを除いて、基本的に同じクエリである必要があります。 OrderItem
Product
ユーザーは、顧客が市外局番10024に住んでいるという条件に取り組むこともできます。または、注文に製品ID 14の少なくとも/ほとんど/正確に2つのアイテムが含まれていることもあります。各条件は、明らかに独自の方法でハードコーディングする必要があります。 、ただし、各条件の基本的な署名は次のようになります。
private static Expression<Func<Order, bool>> SomePredicate(object someParameters)
これまでのところ、これが私が説明した最後の状態に対して私が持っているものです:
private static Expression<Func<Order, bool>> CountProductItems(int productID, int count, Comparator comparator) {
Expression<Func<Order, int>> productOrderItems =
order => order.Items.Where(i => i.ProductID == productID)
.Sum(i => i.Quantity);
switch (comparator) {
case Comparator.Equals:
// return... uh... now what?
case Comparator.GreaterThan:
// you get the picture....
}
}
その最後の構文ステップが欠落しているだけです。その式を使用してproductOrderItems
、その式が等しい/小さい/大きい/などの場合に順序を返す方法。提供された値count
。
どうしますか?