2010-06-05 7 views
14

I ont une classe et une liste comme ci-dessous:LINQ et somme conditionnelle

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

List<C1> myList ...; 

La liste est chargée de plusieurs dossiers, et ils ont différentes valeurs dans RecType Ce que je veux est de calculer le total sur le revenu et résultat, mais seulement pour une certaine valeur de RecType

Voici un code pseudo de ce que je dois obtenir

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

Comment puis-je accomplir cela avec LINQ?

Merci

Répondre

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

D'abord, vous filtre sur le type d'enregistrement (Where); puis vous transformez par Select le Income de chaque objet; et enfin vous Sum tout cela.

Ou pour une version légèrement plus laconique:

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

Je crois que mon code va être 15-20% plus rapide que @ Marc ... – code4life

+0

Merci beaucoup, cela semblait être le seul corrige pour moi d'obtenir la somme d'une décimale NULL. – user1534664

+0

C'est génial! Fonctionne avec linq pour les entités et résout même le problème lorsque la liste est vide. –

Questions connexes