Kann mir irgendein LINQ-Spezi folgende Anforderung in eine LINQ-Folge bringen?
Selbst komme ich einfach nicht über die einfache Gruppierung hinaus.
Ausgangsliste
Liste nach Umformung.
Ich möchte also zunächst nach der ID gruppieren.
Danach möchte ich nach der Kategorie gruppieren und dabei die Werte wie Preis o.ä zusammenrechnen.
Außerdem soll in der ersten Gruppe der Preis aller Untergruppen auftauchen.
Ich hoffe, dass das ungefähr klar geworden ist. Sonst einfach fragen
Hier vielleicht noch die Klassen, so wie ich mir das vorstelle.
Code
Ich habe auch mal ein Testprojekt mit einem Wunschergebnis angehangen.
Selbst komme ich einfach nicht über die einfache Gruppierung hinaus.
Ausgangsliste
ID | Category | Name | Price |
1 | 1 | Test | 1 |
1 | 1 | Test | 1 |
1 | 2 | Test | 3 |
2 | 1 | Abc | 5 |
2 | 3 | Abc | 4 |
Liste nach Umformung.
ID | Category | Name | Price |
1 | Test | 5 | |
1 | Test | 2 | |
2 | Test | 3 | |
2 | Abc | 9 | |
1 | Abc | 4 | |
3 | Abc | 5 |
Ich möchte also zunächst nach der ID gruppieren.
Danach möchte ich nach der Kategorie gruppieren und dabei die Werte wie Preis o.ä zusammenrechnen.
Außerdem soll in der ersten Gruppe der Preis aller Untergruppen auftauchen.
Ich hoffe, dass das ungefähr klar geworden ist. Sonst einfach fragen
Hier vielleicht noch die Klassen, so wie ich mir das vorstelle.
C#-Quellcode
- public class Item
- {
- public int ID { get; set; }
- public int Category { get; set; }
- public string Name { get; set; }
- public float Price { get; set; }
- }
- public class GroupedItem
- {
- public int ID { get; set; }
- public string Name { get; set; }
- public float Price { get; set; } // Gesamtpreis
- public IEnumerable<Item> Childs { get; set; } // Alle gruppierten Kategoerien
- }
C#-Quellcode
- // Demo Elemente
- IEnumerable<Item> items = new List<Item>()
- {
- new Item() {ID = 1, Category = 1, Name = "Test", Price = 1.0f},
- new Item() {ID = 1, Category = 1, Name = "Test", Price = 2.0f},
- new Item() {ID = 1, Category = 2, Name = "Test", Price = 2.0f},
- new Item() {ID = 1, Category = 2, Name = "Test", Price = 2.0f},
- new Item() {ID = 2, Category = 1, Name = "Abc", Price = 3.0f},
- new Item() {ID = 2, Category = 1, Name = "Abc", Price = 4.0f},
- new Item() {ID = 2, Category = 3, Name = "Abc", Price = 2.0f},
- };
- //TODO: Magic LINQ
- /**
- * Ergebnis
- GroupedItem
- ID = 1
- Name = Test
- Price = 7.0f
- Child = {
- {
- ID = 1
- Category = 1
- Name = Test
- Price = 3.0f
- }
- {
- ID = 1
- Category = 2
- Name = Test
- Price = 4.0f
- }
- }
- GroupItem
- ID = 2
- Name = Abc
- Price = 9.0f
- Child = {
- {
- ID = 2
- Category = 1
- Name = Abc
- Price = 7.0f
- }
- {
- ID = 2
- Category = 3
- Name = Abc
- Price = 2.0f
- }
- }
- */
Ich habe auch mal ein Testprojekt mit einem Wunschergebnis angehangen.