2010-03-02 9 views
8

Estoy creando un método que recopila totales acumulados a lo largo del mes. El problema es que puede que no haya cargos por algunos de los artículos en un mes determinado, por lo que no se devolverán las filas.Linq a Sql Suma sin registros

puedo ver cómo esto sin error de datos:

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

¿Cuál es el mejor método para detectar no hay transacciones de combustible para ese mes y establecer el costo del combustible a 0? Solo intenta atrapar? This article habló del problema, pero no hay solución.

+1

ver http://stackoverflow.com/a/2456670/463425 .Elija (a => (doble) a.TotalCost?) .sum(); – tkerwood

Respuesta

-10

He añadido un catch para detectar el error. Nunca encontré una solución diferente.

15

El problema se debe a que el where no devuelve ninguna secuencia para que la suma no pueda funcionar; sin embargo, si usa .DefaultIfEmpty antes de la suma, funciona bien.

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

Espero que esto ayude.

+0

Lo intentaré la próxima vez que necesite hacer esto. –

+3

No funciona con Linq a SQL – jeromeyers

5

que resolvió:

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