2009-06-23 10 views
3

Hier ist, was ich habe:Was ist die Äquivalenz eines SQL WHERE in Lambda-Ausdrücken?

decimal sum = _myDB.Products.Sum(p => p.Price).GetValueOrDefault(); 

Ich habe auch zwei Termine: DateTime start, DateTime end
Ich mag die Summe aller von den Produktpreise zwischen Anfang und Ende zurückzuholen, aber ich kann nicht herausfinden, wie die Variablen in die Lambda-Gleichung zu integrieren.

Wie integrieren Sie Variablen in eine Lambda-Gleichung, um eine Spezifikation zu erhalten?

Antwort

11

Verwenden Enumerable.Where

decimal sum = _myDB.Products 
        .Where(p => (p.Date >= start) && (p.Date <= end)) 
        .Sum(p => p.Price) 
        .GetValueOrDefault(); 
+6

bei der Umsetzung einverstanden ist, aber Anfragen wie diese sind viel klarer auf mehreren Linien. Richten Sie die Punkte aus :) –

+0

Guter Punkt auf der Formatierung - Ich steckte einfach aus Gründen der Konsistenz mit der Formatierungsmethode seiner ursprünglichen Frage, aber das ist, wie ich es in der Regel in meinem eigenen Code schreibe. –

+0

@ Jon: Fertig. Habe deinen Kommentar erst jetzt gesehen. –

0
_myDB.Products 
.Where(p => p.start >= "somevalue") 
.Where(p => p.end <= "somevalue") 
.Sum(p => p.Price).GetValueOrDefault(); 
+0

Es gibt keine Notwendigkeit, zwei Where-Klauseln mit separaten Prädikaten zu haben. –

+0

Ich bevorzuge diesen Stil, da es die Lesbarkeit verbessert – Rony

1
decimal sum = _myDB.Products 
.Where(p => p.Start >= mystartDate && p.End <= myenddate) 
.Sum(p => p.Price) 

Pardon meine Syntax. Aber ich hoffe, du hast die Idee.

EDIT: Nach Reeds Vorschlag korrigiert.
Old Code (falscher)

decimal sum = _myDB.Products 
.Sum(p => p.Price) 
.Where(p => p.Start >= mystartDate && p.End <= myenddate) 
+0

Die Where-Klausel muss vor Sum gehen. Summe gibt eine Dezimalzahl zurück, und Sie können ".Where" nicht für einen Dezimalwert verwenden. –

+0

Jungs, wird dies anders funktionieren (d. H. Anders als WHERE und dann SUM)? – shahkalpesh

+1

Dies wird überhaupt nicht kompiliert. Sie können nicht ausführen. Wo auf einem einzelnen Wert, der von Sum() zurückgegeben wird. –