如何对列表中的所有项共享特定属性的项进行求和?

时间:2014-03-14 19:02:52

标签: c# .net

我有一个对象列表。每个对象都有一组变量/属性。它们由多个小数和一个状态的字符串表示组成。如何对具有相同状态的对象列表中的每个金额求和?

我知道我可以Model.ReportList.Sum(x => x.Amount)来获取整个列表中所有Amount变量的总和。我想做同样的事情,但只对每个Amount的{​​{1}}变量求和,例如,x

3 个答案:

答案 0 :(得分:3)

您希望对值进行分组,可以使用GroupBy对其进行分组,然后对每个组进行求和:

Model.ReportList.GroupBy(report => report.State, 
    (State, reports) => new { State, Sum = reports.Sum(report => report.Amount) });

答案 1 :(得分:2)

var sums = Model.ReportList.GroupBy(r => r.State)
   .Select(grp => new { State = grp.Key, Sum = grp.Sum(r => r.Amount) })

答案 2 :(得分:2)

使用GroupBy 可能是一个很好的答案,但如果您只关心一个州的总和金额,那就太过分了。如果这就是您所需要的(正如您的问题所示),请改为使用Where扩展名:

Model.ReportList.Where(x => x.State == "GA").Sum(x => x.Amount);