2010-06-28 15 views
1
DealsThisMonthOpen = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Open").Count(), 
DealsThisMonthLost = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Lost").Count(), 
DealsThisMonthWon = deals.Where(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Won").Count(), 
DealsThisMonth = DealsThisMonthOpen + DealsThisMonthLost + DealsThisMonthWon; 

La dernière ligne n'est pas correcte. Est-il possible de le faire comme ça ou je vais devoir écrire une requête pour cette propriété pour calculer la somme?Propriétés de la somme utilisant LINQ

Merci

Répondre

2

BTW, Count() soutient également l'argument predicate: http://msdn.microsoft.com/en-us/library/bb535181.aspx

Ainsi, vous pouvez:

var a = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Open"), 
var b = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Lost"), 
var c = deals.Count(deal => deal.DateCreated.Month == date.Month && deal.DealStatus == "Won"), 

new foobar 
{ 
    DealsThisMonthOpen = a, 
    DealsThisMonthLost = b, 
    DealsThisMonthWon = c, 
    DealsThisMonth = a + b + c 
}; 
0

Avez-vous considéré une méthode d'extension? Où vous fournissez la fonctionnalité de somme.

2

Peut-être que je manque quelque chose, mais cela ne devrait certainement travailler.

Le Count() renvoie un int si DealsThisMonthOpen, DealsThisMonthLost et DealsThisMonthWon sont toutes les valeurs entières. DealsThisMonth est simplement la somme de ces trois valeurs entières.

Vous pouvez aussi faire un peu plus propre (sauf si vous avez besoin des trois valeurs distinctes pour quelque chose d'autre plus tard:

var dealsThisMonth = deals 
    .Count(d => d.DateCreated.Month == date.Month 
     && (new string[] { "Open", "Lost", "Won" }).Contains(d.DealStatus));