我试图总结一个人组织分组的一系列项目的成本。我相信总结是正常的,但我没有看到我的分组。存储在汇总中的对象只包含求和的值。除了该组织的成本总和之外,我希望他们拥有该组织。我在这个表达中错过了什么?
var rollup = OrgPersonList.GroupBy(
person => person.Person.Org).Select(group =>
group.Sum(price => price.Items.Sum(item =>
item.Cost)));
答案 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
而不是person
或price
,因为看起来相同的项目同时封装了两者。
或者作为查询表达式:
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() });