Problembeschreibung
Sie haben eine Reihe von Produktdaten, die gemäß dem Produktcode gepackt werden müssen. Für jeden Code möchten Sie ein Objekt zurückgeben, das den Produktnamen, die Produktmenge und den Gesamtpreis enthält. Sie verwenden die Gruppen- und SelectMany -Funktionen von Linq, um dieses Ziel zu erreichen, aber die quantitativen Attribute in den Ergebnisobjekten sind immer 1.
Lösung
Das Problem ist, dass die SelectMany -Funktion verwendet wird, um jedes Element in jeder Gruppe zu verarbeiten. Um dieses Problem zu lösen, verwenden Sie stattdessen ausgewählte.
Alternativ
<code class="language-csharp">List<resultline> result = Lines .GroupBy(l => l.ProductCode) .Select(cl => new ResultLine { ProductName = cl.First().Name, Quantity = cl.Count().ToString(), Price = cl.Sum(c => c.Price).ToString(), }) .ToList();</code>
zu generieren Verbesserter Datentyp
Betrachten Sie die Änderung der Menge und der Preisattribute in INT bzw. Dezimal, da dies die Art dieser Werte besser widerspiegeln kann.
<code class="language-csharp">List<resultline> result = Lines .GroupBy(l => new { l.ProductCode, l.Name }) .Select(cl => new ResultLine { ProductName = cl.First().Name, Quantity = cl.Count().ToString(), Price = cl.Sum(c => c.Price).ToString(), }) .ToList();</code>
Das obige ist der detaillierte Inhalt vonWie verwendete ich die Gruppen-, Summen- und Zählung von LINQ korrekt, um Produktdaten zu aggregieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!