如何根据另一个成员的值来汇总通用列表中成员的值?

时间:2015-11-11 18:36:00

标签: c# linq generics sum where

我有这个通用名单:

private List<ItemsForMonthYear> _itemsForMonthYearList;

...存储此类的实例化:

public class ItemsForMonthYear
{
    public String ItemDescription { get; set; }
    public String monthYr { get; set; }
    public int TotalPackages { get; set; }
    public Decimal TotalPurchases { get; set; }
    public Decimal AveragePrice { get; set; }
    public Double PercentOfTotal { get; set; }
}

我需要计算每个月(单独)列表中所有TotalPackages的总数。我有一个开始:

private int GetGrandTotalPackagesForMonth(String YYYYMM)
{
    return _itemsForMonthYearList.Sum(x => x.TotalPackages);
}

但是,这将获得所有个月的Grand TotalPackages;我只想(一次一个)一个月的大总计。我希望我可以使用“Where”这样的东西:

return _itemsForMonthYearList.Sum(x => x.TotalPackages).Where(x => x.monthYr == YYYYMM);

......但这不可用。

如何将总和限制在指定的月份?

2 个答案:

答案 0 :(得分:4)

您应首先应用过滤器,然后将TotalPackages加起来像:

return _itemsForMonthYearList.Where(x => x.monthYr == YYYYMM).Sum(x => x.TotalPackages);

虽然不相关,但如果您愿意,可以使用GroupBy在单个查询中获取每个月的总和,如:

var sumForeachMonth = _itemsForMonthYearList.GroupBy(x => x.monthYr)
    .Select(grp => new
    {
        Month = grp.Key,
        Sum = grp.Sum(r => r.TotalPackages)
    });

答案 1 :(得分:1)

您可以使用Where子句进行此类操作

myList.Where(x => x. monthYr == "Nov-15").Sum(x => x.TotalPackages);