我有多个文件,其中的字段大多相同。只有两个不同的字段是Price
和Quantity
。我想创建一个IEnumerable()
,其中包含与每个分组匹配的第一个项目,但价格和数量字段已替换为此分组中所有其他匹配项目中的sum()
。
即
fieldone fieldtwo fieldthree price quantity
a1 b1 c1 3 5
a1 b1 c1 13 15
a1 b1 c1 23 25
a2 b2 c2 4 7
a2 b2 c2 14 17
应该返回:
fieldone fieldtwo fieldthree price quantity
a1 b1 c1 39 45
a2 b2 c2 18 24
我一直在关注GroupBy()
例如:
var groupedResults = results.GroupBy(a => new {
a.Item1.FieldOne,
a.Item1.FieldTwo,
a.Item2.FieldThree}
)
但我不知道如何使用它来获得我想要的结果。
答案 0 :(得分:2)
您需要预测您的小组以汇总必填字段
var groupedResults = results.GroupBy(a => new {
a.Item1.FieldOne,
a.Item1.FieldTwo,
a.Item2.FieldThree}
).Select(g => new {
g.Key.FieldOne,
g.Key.FieldTwo,
g.Key.FieldThree,
Price = g.Sum(x => x.Price),
Quantity = g.Sum(x => x.Quantity)
});
还有另一个重载,您可以为GroupBy
提供第二个参数以获得结果,这可以节省Select
之后的第二个GroupBy
链接,但我个人更喜欢上述方法。
答案 1 :(得分:2)
您需要使用包含结果选择器的重载。
var groupedResults = results.GroupBy(a => new
{
a.Item1.FieldOne,
a.Item1.FieldTwo,
a.Item2.FieldThree
},
(key, items) => new
{
key.FieldOne,
key.FieldTwo,
key.FieldThree,
Price = items.Sum(a => a.Price),
Quantity = items.Sum(a => a.Quantity)
});
答案 2 :(得分:0)
您可以测试一下:
var result = Db.Entity
.GroupBy(p=>new {x.fieldone, x.fiedltwo, x.fieldthree})
.Select(p=> new {
fieldone = p.fieldone,
fieldtwo = p.fiedltwo,
fieldthree = p.fieldthree,
price = p.Sum(x=>x.price),
quantity = p.Sum(x=>x.quantity)}).ToList();