2011-11-03 34 views
6

tengo la siguiente consultaLINQ a SQL con suma lambda como en el estado

from p in _context.Products 
where p.Purchases.Sum(item => item.CCAmount) > 0 && p.Purchases.Sum(item => item.CCAmount) > p.PayOuts.Sum((item => item.AmountPaid) 
select p; 

Básicamente estoy tratando de recuperar todos los productos que tienen un importe de compra resumió mayor que 0 y cuya resumió importe de la compra es mayor que el monto que hemos pagado (estamos vendiendo productos en nombre de otras personas y les pagamos en pagos completos o parciales). El problema es que si no hay entradas en la tabla de pagos para un producto en particular, entonces ese producto no aparece en la lista resultante. Sin embargo, si inserto un pago en la tabla de pagos, ese producto aparecerá en la lista de productos. Es casi como si usar suma en una colección vacía no se evaluaría como uno esperaría, es decir, como 0. ¿Me falta algo aquí?

Gracias por su ayuda.

+0

¿Cuál es el SQL generado? – svick

Respuesta

5

El problema es que SUM en SQL devuelve null si no hay registros para sumar.

Tienes que hacer trampa un poco.

Probar:

((int?)p.PayOuts.Sum(item => item.AmountPaid)).GetValueOrDefault() 

o escrita de una manera diferente poco

((int?)p.PayOuts.Sum(item => item.AmountPaid) ?? 0) 
+0

+1; ¿Pero creo que todavía necesitarías el yeso para el segundo caso para hacer que el C# exterior fuera feliz ...? –

+0

@ MerlynMorgan-Graham, tienes razón. –

+0

Gracias por la ayuda, funciona a la perfección. – Peuge