2015-11-11 48 views
-2

我有了這個通用的清單:如何基於另一個成員的值來對通用列表中的成員的值進行求和?

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); 
} 

此,雖然得到大TotalPackages爲所有個月;我只想要(一次一個)大特大月份。我希望我可以使用「Where」這樣的東西:

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

...但那不可用。

如何限制總和到指定的月份?

+0

寶條款可以複製[如何篩選和使用LINQ求和](http://stackoverflow.com/questions/19520993/how-to-filter-and-sum-using-linq) – Fabjan

+1

基本問題與瑣碎的答案。 –

回答

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

您擁有的可用於此類操作

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