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

Linq to sql Linq to Sql-在where子句中使用sum,linq-to-sql,Linq To Sql,我试图根据其他值选择订购超过或少于2000件产品的订单。我需要从Orders表中选择信息,但在OrdersProducts表中检查此值,特别是OrdersProducts.ProductQty的总和。由于其他要求,我还需要使用谓词生成器来完成这项工作。到目前为止,我有这个,但它没有返回正确的结果。它使用嵌套的Lambda表达式,我不知道我可以这么做,但我尝试了,它工作了,但没有返回正确的结果 Dim getOrders = From d In db.Orders _

我试图根据其他值选择订购超过或少于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)
Dim getOrders=从d开始,单位为db.Orders_
其中d.状态=订单状态。已批准_
选择d
'然后通过Predicatebuilder添加参数的for循环。。。
如果超过2000=真,则
"2000多",
谓词1=谓词1.和(函数(d)(d.OrderProducts.Sum(函数(c)c.ProductQty>2000)))
其他的
"2000年以下",
谓词1=谓词1.和(函数(d)(d.OrderProducts.Sum(函数(c)c.ProductQty<2000)))
如果结束
basePredicate=basePredicate.Or(谓词1)
'循环结束'
getOrders=getOrders.Where(basePredicate)
为了简洁起见,我删除了一些代码,但我认为这能说明问题。我该怎么做??谢谢

尝试更改此选项:

(d.OrderProducts.Sum(Function(c) c.ProductQty > 2000))
为此:

(d.OrderProducts.Sum(Function(c) c.ProductQty) > 2000)
我没有构建这个来测试它,但它似乎正在尝试对布尔比较的结果求和,而不是对数量求和然后进行比较。

尝试更改此选项:

(d.OrderProducts.Sum(Function(c) c.ProductQty > 2000))
为此:

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

我构建这个函数并不是为了测试它,但它似乎正在尝试对布尔比较的结果求和,而不是对数量求和然后进行比较。

它构建的sql语句看起来好多了!!快速反应!我需要设置一些其他的东西来测试它,我会让你知道是否修复了它,目前还不能确定,但看起来更好。谢谢嘿,工作起来很有魅力!接得好。我其实是想弄明白为什么我错过了一张我知道我应该得到的唱片。。。哈,它等于2000,我只有小于和大于,哈哈。再次感谢。它的建筑看起来好多了!!快速反应!我需要设置一些其他的东西来测试它,我会让你知道是否修复了它,目前还不能确定,但看起来更好。谢谢嘿,工作起来很有魅力!接得好。我其实是想弄明白为什么我错过了一张我知道我应该得到的唱片。。。哈,它等于2000,我只有小于和大于,哈哈。再次感谢。