Ich nutze den Code von Verschachteltes Grouping - LINQ.
Doch irgendwie, wird automatisch durch das Gruppieren auch die Ausgangsliste verändert.
Folgendes Beispiel.
Schaut man sich jetzt nach der Gruppierung
Aber warum? Ich nutze doch den Kopierkonstruktor der Liste.
Weiß da jemand warum das so ist, und noch besser, wie ich das Problem lösen kann?
Klassen
Edit: Item ist
Doch irgendwie, wird automatisch durch das Gruppieren auch die Ausgangsliste verändert.
Folgendes Beispiel.
C#-Quellcode
- // Demo Elemente
- IEnumerable<Item> collection = 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 = 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},
- };
- var groups = new List<GroupedItem>();
- List<Item> items = new List<Item>(collection);
- foreach (var grID in from itm in items group itm by itm.ID)
- {
- var cats = new List<Item>();
- foreach (var grCat in from itm in grID group itm by itm.Category)
- {
- var cat = grCat.First();
- cat.Price = grCat.Sum(c => c.Price);
- cats.Add(cat);
- }
- var gi = new GroupedItem() { ID = grID.Key, Name = grID.First().Name, Childs = cats, Price = cats.Sum(itm => itm.Price) };
- groups.Add(gi);
- }
Schaut man sich jetzt nach der Gruppierung
collection
an, sind die Werte verändert.Aber warum? Ich nutze doch den Kopierkonstruktor der Liste.
.ToList()
klappt ebenso wenig.Weiß da jemand warum das so ist, und noch besser, wie ich das Problem lösen kann?
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; }
- public IEnumerable<Item> Childs { get; set; }
- }
Edit: Item ist
class
und nicht struct
. Wenn ich das änder, dann klappt es. Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „LaMiy“ ()