使用LINQ总和性质(Sum properties using LINQ)

2019-10-23 18:47发布

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;

最后一行是不正确的语法。 是否有可能不喜欢这样,否则我将不得不写查询这个属性来计算总和?

谢谢

Answer 1:

顺便说一句, 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
};


Answer 2:

也许我失去了一些东西,但一定要努力。

Count( )方法返回一个int所以DealsThisMonthOpenDealsThisMonthLost ,和DealsThisMonthWon都是整数值。 DealsThisMonth是这三个整数值的简单相加。

你也可以把它干净了一点(除非你需要的东西,这三个不同的值以后还有:

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


Answer 3:

你有没有考虑的扩展方法? 当您提供总和值的特征。



文章来源: Sum properties using LINQ
标签: c# linq sum