我正在尝试选择其中订购的产品超过或低于2000的订单,具体取决于其他值。我需要从Orders表中选择信息,但是在OrdersProducts表中检查这个值,特别是OrdersProducts.ProductQty的总和。由于其他要求,我还需要使用谓词构建器来执行此操作。到目前为止,我有这个,但它没有正确返回结果。它使用嵌套的Lambda表达式,我不知道我可以做但我尝试了它并且它有效,但它没有返回正确的结果。
Dim getOrders = From d In db.Orders _
Where d.Status = OrderStatus.Approved _
Select d
' Then a for loop adding parameters via Predicatebuilder...
If over2000 = True Then
' over 2000
predicate1 = predicate1.And(Function(d) (d.OrderProducts.Sum(Function(c) c.ProductQty > 2000)))
Else
' under 2000
predicate1 = predicate1.And(Function(d) (d.OrderProducts.Sum(Function(c) c.ProductQty < 2000)))
End If
basePredicate = basePredicate.Or(predicate1)
' End For loop
getOrders = getOrders.Where(basePredicate)
我为了简洁而删除了一些代码,但我认为这样可以解决问题。我怎样才能做到这一点??谢谢!
答案 0 :(得分:4)
尝试更改此内容:
(d.OrderProducts.Sum(Function(c) c.ProductQty > 2000))
到此:
(d.OrderProducts.Sum(Function(c) c.ProductQty) > 2000)
我还没有构建它来测试它,但它似乎正在尝试对布尔比较的结果求和,而不是将数量相加然后进行比较。