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