2010-06-28 51 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; 

最後一行語法不正確。是否有可能這樣做,否則我將不得不爲此屬性編寫查詢來計算總和?使用LINQ的總和屬性

感謝

回答

2

順便說一句,Count()還支持predicate說法: http://msdn.microsoft.com/en-us/library/bb535181.aspx

,因此您可以:

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

你有沒有考慮的擴展方法?您提供總和功能的地方。

2

也許我失去了一些東西,但一定要努力。

Count(的)方法返回一個int所以DealsThisMonthOpenDealsThisMonthLost,和DealsThisMonthWon都是整數值。 DealsThisMonth只是這三個整數值的總和。

你也可以把它乾淨了一點(除非你需要三個不同值別的東西以後:

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