2010-03-02 7 views
8

Ich erstelle eine Methode, die kumulierte Summen während des Monats sammelt. Das Problem besteht darin, dass für einige Artikel in einem bestimmten Monat möglicherweise keine Gebühren anfallen, sodass keine Zeilen zurückgegeben werden.Linq zu SQL Summe ohne Datensätze

kann ich sehen, wie diese ohne Datenfehler würde:

double fuelCost = (double)(from a in db.EquipmentFuelLogs 
          where a.wdEquipmentMainGeneralOID == vehicleKey &&  
           (monthBeginDate < a.Date1 && a.Date1 < monthEndDate) 
          select a.TotalCost).Sum(); 

Was ist der beste Ansatz ist kein Kraftstoff Transaktionen für diesen Monat und stellen die Kraftstoffkosten auf 0 zu erkennen? Versuchen Sie es einfach zu fangen? This article sprach von dem Problem, aber keine Lösung.

+1

siehe http://stackoverflow.com/a/2456670/463425 .Select (a => (double) a.TotalCost?) .sum(); – tkerwood

Antwort

-10

Ich habe einen Haken hinzugefügt, um den Fehler zu erfassen. Ich habe nie eine andere Lösung gefunden.

15

Das Problem ist, weil die wo keine Sequenz zurückgibt daher die Summe nicht funktionieren kann, aber wenn Sie .DefaultIfEmpty vor der Summe verwenden, funktioniert es gut.

decimal? orderValue = 
    orders.Where(ee => ee.Name == "SomeName").DefaultIfEmpty().Sum(s => s.OrderCost); 

Hoffe, das hilft.

+0

Ich werde das nächste Mal versuchen, ich muss dies tun. –

+3

Funktioniert nicht mit Linq zu SQL – jeromeyers

5

ich beschlossen:

decimal orderValue = orders.Where(ee => ee.Name == "SomeName").Sum(s => (decimal?)s.OrderCost)??0;