using static System.Console;
using System.Collections.Generic;
using System.Linq;
public class Program {
public static void Main() {
IList<VendaDevolucao> vendas = new List<VendaDevolucao>() {
new VendaDevolucao { Id = 100, Venda = 230.00, Devolucao = 0 },
new VendaDevolucao { Id = 100, Venda = 0, Devolucao = 50.00 },
new VendaDevolucao { Id = 101, Venda = 515.00, Devolucao = 0 },
new VendaDevolucao { Id = 101, Venda = 0, Devolucao = 42.00 },
};
var junta = vendas.GroupBy(x => x.Id)
.Select(x => new {
Id = x.First().Id,
Venda = x.Sum(v => v.Venda),
Devolucao = x.Sum(v => v.Devolucao)
});
foreach (var item in junta.ToList()) WriteLine($"{item.Id} -> {item.Venda}, {item.Devolucao}");
}
}
public class VendaDevolucao {
public virtual int Id { get; set; }
public virtual double Venda { get; set; }
public virtual double Devolucao { get; set; }
}
//https://pt.stackoverflow.com/q/134044/101
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgkJCQkJCnB1YmxpYyBjbGFzcyBQcm9ncmFtIHsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkgewoJCUlMaXN0PFZlbmRhRGV2b2x1Y2FvPiB2ZW5kYXMgPSBuZXcgTGlzdDxWZW5kYURldm9sdWNhbz4oKSB7CgkJCW5ldyBWZW5kYURldm9sdWNhbyB7IElkID0gMTAwLCBWZW5kYSA9IDIzMC4wMCwgRGV2b2x1Y2FvID0gMCB9LAoJCQluZXcgVmVuZGFEZXZvbHVjYW8geyBJZCA9IDEwMCwgVmVuZGEgPSAwLCBEZXZvbHVjYW8gPSA1MC4wMCB9LAoJCQluZXcgVmVuZGFEZXZvbHVjYW8geyBJZCA9IDEwMSwgVmVuZGEgPSA1MTUuMDAsIERldm9sdWNhbyA9IDAgfSwKCQkJbmV3IFZlbmRhRGV2b2x1Y2FvIHsgSWQgPSAxMDEsIFZlbmRhID0gMCwgRGV2b2x1Y2FvID0gNDIuMDAgfSwKCQl9OwkJCgkJdmFyIGp1bnRhID0gdmVuZGFzLkdyb3VwQnkoeCA9PiB4LklkKQoJCQkuU2VsZWN0KHggPT4gbmV3IHsKICAgICAgICAgICAgICAgIElkID0geC5GaXJzdCgpLklkLAogICAgICAgICAgICAgICAgVmVuZGEgPSB4LlN1bSh2ID0+IHYuVmVuZGEpLAogICAgICAgICAgICAgICAgRGV2b2x1Y2FvID0geC5TdW0odiA9PiB2LkRldm9sdWNhbykKICAgICAgICAgICAgfSk7CgkJZm9yZWFjaCAodmFyIGl0ZW0gaW4ganVudGEuVG9MaXN0KCkpIFdyaXRlTGluZSgkIntpdGVtLklkfSAtPiB7aXRlbS5WZW5kYX0sIHtpdGVtLkRldm9sdWNhb30iKTsKCX0KfQoKcHVibGljIGNsYXNzIFZlbmRhRGV2b2x1Y2FvIHsKICAgIHB1YmxpYyB2aXJ0dWFsIGludCBJZCB7IGdldDsgc2V0OyB9CiAgICBwdWJsaWMgdmlydHVhbCBkb3VibGUgVmVuZGEgeyBnZXQ7IHNldDsgfQogICAgcHVibGljIHZpcnR1YWwgZG91YmxlIERldm9sdWNhbyB7IGdldDsgc2V0OyB9Cn0KCi8vaHR0cHM6Ly9wdC5zdGFja292ZXJmbG93LmNvbS9xLzEzNDA0NC8xMDE=