如何对列表中所有共享特定属性的一组项求和

本文关键字:求和 一组 属性 列表 共享 | 更新日期: 2023-09-27 17:50:15

我有一个对象列表。每个对象都有一组变量/属性。它们由多个十进制数字和状态的字符串表示形式组成。我该如何将具有相同状态的对象列表中的每个数量相加?

我知道我可以执行Model.ReportList.Sum(x => x.Amount)来获得整个列表中所有Amount变量的和。我想做同样的事情,但只对每个xAmount变量求和,例如,x.State = "GA"

如何对列表中所有共享特定属性的一组项求和

您正在寻找分组值,这可以使用GroupBy完成,然后对每个组求和:

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

使用GroupBy 可能是一个很好的答案,但是如果您只关心一个状态的总和,那么是多余的。如果这是您需要的(正如您的问题所建议的),请使用Where扩展代替:

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