Linq to Sql - 在where子句中使用sum

时间:2009-05-26 16:11:28

标签: linq-to-sql

我正在尝试选择其中订购的产品超过或低于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)

我为了简洁而删除了一些代码,但我认为这样可以解决问题。我怎样才能做到这一点??谢谢!

1 个答案:

答案 0 :(得分:4)

尝试更改此内容:

(d.OrderProducts.Sum(Function(c) c.ProductQty > 2000))

到此:

(d.OrderProducts.Sum(Function(c) c.ProductQty) > 2000)

我还没有构建它来测试它,但它似乎正在尝试对布尔比较的结果求和,而不是将数量相加然后进行比较。