LINQ. Suma wartości wierszy o tej samej wartości w dwóch kolumnach

0

Witam,

Mam listę

var sellList = new List<Sell>() {
                      new Sell(){ Id = 1, L1=2, L2=3, Price=20 },
                      new Sell(){ Id = 2, L1=3, L2=4, Price=15 },
                      new Sell(){ Id = 3, L1=2, L2=3, Price=25 },
                      new Sell(){ Id = 4, L1=1, L2=3, Price=40 },
                      new Sell(){ Id = 5, L1=3, L2=4, Price=15 },
                      new Sell(){ Id = 6, L1=2, L2=3, Price=10 }
                };

Chciałbym w wyniku zapytania LINQ otrzymać wynik w postaci wierszy których para wartości "L1" i "L2" będzie unikalna a pole "Price" będzie sumą wartości wierszy których wartości "L1" i "L2" w liście sellList były takie same.

ID | L1 | L2 | Price
1 | 2 | 3 | 55
2 | 3 | 4 | 30
4 | 1 | 3 | 40

To zapytanie nie działa.

var query = sellList
     .GroupBy((x,y) => x.L1, y.L2)
     .Select(g => new { ID = g.ID, L1 = g.L1, L2 = g.L2, Price = g.Sum(s => s.Price)})
     .ToList();

Z góry dziękuję za wszelką pomoc.

Piotr.

0

Spróbuj z L1 i L2 zrobić Lx = string.Concat(L1, L2) i wtedy pogrupować po Lx.

7
maszrum napisał(a):

Spróbuj z L1 i L2 zrobić Lx = string.Concat(L1, L2) i wtedy pogrupować po Lx.

A co to, Java, żeby w stringly typed iść? :P

.GroupBy(x => new { x.L1, x.L2 })
.Select(g => new { ID = g.First().Id, L1 = g.Key.L1, L2 = g.Key.L2, Price = g.Sum(s => s.Price) })
0

Tutaj jest przykład z 2 propsami Distinct:
https://stackoverflow.com/a/10720079

.GroupBy(m => new {m.L1, m.L2})

Za tym bym dodał .Where(suma której do końca ne rozumiem).FirstOrDefault() lub .Select(group => group.First()) Ale chyba przykład poprzednika rozwiązauje problem.

0

@somekind: Odpowiedź w punkt. Bardzo Dziękuję!

1 użytkowników online, w tym zalogowanych: 0, gości: 1