2009-05-26 40 views
0

我試圖選擇訂單,其中有超過2000個訂購的產品,具體取決於其他值。我需要從訂單表中選擇信息,但在OrdersProducts表中檢查此值,特別是OrdersProducts.ProductQty的總和。由於其他要求,我還需要使用謂詞構建器來完成此操作。到目前爲止,我有這個,但它沒有正確返回結果。它使用了嵌套的Lambda表達式,我不知道我可以做什麼,但是我嘗試了它並且工作正常,但是它沒有返回正確的結果。Linq to Sql - 在where子句中使用sum

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) 

爲了簡潔,我刪除了一些代碼,但我認爲這得到了重點。我怎樣才能做到這一點??謝謝!

回答

4

嘗試修改此:

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

這樣:

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

我還沒有建立這個測試它,但現在看來,它目前正在試圖總結一個布爾值的結果比較而不是總結數量然後進行比較。

+0

而且,當然,也修改「2000以下」部分。 – 2009-05-26 16:18:02