我需要构建一个可配置的查询构建器,允许用户组合任意数量的可能条件。例如,假设我们有Customer
、Order
和OrderItem
的经典案例Product
。用户希望能够为所有超过 3 个项目的订单绘制报告。或者可能只有一件商品的订单。应该是基本相同的查询,只是比较器会不同。
用户可能还想附加一个条件,即客户居住在区号 10024。或者订单包括至少/大多数/正好 2 件产品 ID 14。显然,每个条件都需要用自己的方法进行硬编码,但每个条件的基本签名将是:
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
。
你怎么做呢?