2009-05-26 8 views
0

Ich versuche, Bestellungen auszuwählen, die entweder über oder unter 2000 Produkte in ihnen bestellt haben, abhängig von anderen Werten. Ich muss die Informationen aus der Tabelle Orders auswählen, aber diesen Wert in der Tabelle OrdersProducts überprüfen, insbesondere die Summe von OrdersProducts.ProductQty. Ich muss dies auch mithilfe des Prädikat-Builders tun, aufgrund anderer Anforderungen. Bisher habe ich das, aber es gibt die Ergebnisse nicht korrekt zurück. Es verwendet verschachtelte Lambda-Ausdrücke, von denen ich nicht wusste, dass ich es tun könnte, aber ich habe es versucht und es funktioniert, aber es liefert keine korrekten Ergebnisse.Linq to Sql - Verwenden Sie die Summe in der where-Klausel

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) 

Ich entfernte etwas Code für die Kürze, aber ich denke, dass das den Punkt über bekommt. Wie kann ich das machen?? Vielen Dank!

Antwort

4

Versuchen Sie, diese:

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

dazu:

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

Ich habe dies nicht gebaut zu testen, aber es scheint, dass es zur Zeit versuchte, die Ergebnisse einer boolean zusammenzufassen Vergleichen statt die Mengen zu summieren und dann zu vergleichen.

+0

Und natürlich, ändern Sie auch die "unter 2000" Teil. –

+0

Das sql sein Gebäude sieht viel besser aus !! Und schnelle Antwort! Ich muss einige andere Dinge einrichten, um es zu testen, und ich werde Sie wissen lassen, ob das behoben oder nicht, kann im Moment nicht sagen, aber sieht besser aus. Vielen Dank! – Ryan

+0

Hey, funktioniert wie ein Charme! Guter Fang dort. Ich versuchte tatsächlich herauszufinden, warum ich eine Platte vermisste, von der ich wusste, dass ich sie bekommen sollte ... ha, nun, es war 2000 und ich hatte nur weniger als und mehr als, lol. Danke noch einmal. – Ryan