2010-06-05 66 views
14

que tienen una clase y una lista de la siguiente manera:LINQ y la suma condicional

class C1 
{ 
    int RecType ...; 
    decimal Income ...; 
    decimal Outcome ...; 
} 

List<C1> myList ...; 

La lista está cargado con varios registros, y tienen diferentes valores en RecType Lo que quiero es calcular totales sobre la renta y resultado pero sólo para un determinado valor de RecType

Aquí está un pseudo código de lo que necesito para obtener

totalIncome = myList.Sum(Income).Where(RecType==1); 

¿Cómo puedo lograr esto con LINQ?

Gracias

Respuesta

20
totalIncome = myList.Where(x => x.RecType == 1).Select(x => x.Income).Sum(); 

Primero se filtran en el tipo de registro (Where); luego se transforma por Select en el Income de cada objeto; y finalmente tu Sum todo.

O para una versión un poco más concisa:

totalIncome = myList.Where(x => x.RecType == 1).Sum(x => x.Income); 
24
totalIncome = myList.Sum(c=> 
    (c.RecType==1 ? c.Income : 0));
+0

Creo que mi código va a ser un 15-20% más rápido que Mark @ ... – code4life

+0

Muchas gracias, esto parecía ser el único arreglar para que obtenga la suma de un decimal con nulos. – user1534664

+0

¡Esto es asombroso! Funciona con linq para entidades e incluso resuelve el problema cuando la lista está vacía. –