在C#问题中按值分组然后求和

时间:2010-01-14 17:32:08

标签: c# linq group-by sum

我试图总结一个人组织分组的一系列项目的成本。我相信总结是正常的,但我没有看到我的分组。存储在汇总中的对象只包含求和的值。除了该组织的成本总和之外,我希望他们拥有该组织。我在这个表达中错过了什么?

var rollup = OrgPersonList.GroupBy(
    person => person.Person.Org).Select(group =>
        group.Sum(price => price.Items.Sum(item =>
            item.Cost)));

1 个答案:

答案 0 :(得分:1)

嗯,你选择总和 - 如果你也想要密钥,你应该选择它。例如:

var rollup = OrgPersonList.GroupBy(x => x.Person.Org)
    .Select(group => new { group.Key,
                           Sum =group.Sum(x => x.Items.Sum(item => item.Cost))});

请注意,我使用的是x而不是personprice,因为看起来相同的项目同时封装了两者。

或者作为查询表达式:

var rollup = from x in OrgPersonList
             group x by x.Person.Org into grouped
             select new { grouped.Key,
                          Sum =grouped.Sum(x => x.Items.Sum(item =>item.Cost))});

(格式化的空格有点紧张......)

或者,组... by可以计算每个条目的总和,因此结果只需要是组中条目的总和:

var rollup = from x in OrgPersonList
             group x.Items.Sum(item => item.Cost) by x.Person.Org into grouped
             select new { grouped.Key, Sum = grouped.Sum() });