给定以下输入,如何编写LINQ查询或表达式来返回数量的聚合结果集?
输入:
var foo = new[] { new { PO = "1", Line = 2, QTY = 0.5000 },
new { PO = "1", Line = 2, QTY = 0.2500 },
new { PO = "1", Line = 2, QTY = 0.1000 },
new { PO = "1", Line = 2, QTY = -0.1000 }
}.ToList();期望的结果:
一些类似的东西
new { PO = "1", Line = 2, QTY = 0.7500 } // .5 + .25 + .1 + -.1我该如何为多行编写它(参见foo中的对象模型)?
发布于 2011-05-06 07:57:14
这样如何:
var result = foo.GroupBy(x => x.Line)
.Select(g => new { PO = g.First().PO,
Line = g.Key,
QTY = g.Sum(x => x.QTY) });在只有一行的情况下,只需添加一个.Single() - result是在设置foo时定义的匿名类型的IEnumerable。
编辑:
如果PO和Line都应该指定不同的组(PO可以有不同的值),则它们都必须是组密钥的一部分:
var result = foo.GroupBy(x => new { x.PO, x.Line})
.Select(g => new {
PO = g.Key.PO,
Line = g.Key.Line,
QTY = g.Sum(x => x.QTY)
});发布于 2011-05-06 08:01:33
var query = (from t in foo
group t by new {t.PO, t.Line}
into grp
select new
{
grp.Key.PO,
grp.Key.Line,
QTY = grp.Sum(t => t.QTY)
}).ToList()https://stackoverflow.com/questions/5905373
复制相似问题