Problembeschreibung
Wir haben eine Produktsammlung, die nach dem Produktcode gruppiert werden muss. Ziel ist es, ein Objekt, den Produktnamen, die Anzahl der Produkte und den Gesamtpreis jedes Produktcodes zu erstellen.
Codefragment (Fehlerbeispiel)
Der anfängliche Code verwendet , um nach dem Produktcode zu gruppieren, und berechnet dann die Summe jeder Gruppe.
Das Problem befindet sich GroupBy
<code class="language-csharp">List<resultline> result = Lines .GroupBy(l => l.ProductCode) .SelectMany(cl => cl.Select( csLine => new ResultLine { ProductName = csLine.Name, Quantity = cl.Count().ToString(), Price = cl.Sum(c => c.Price).ToString(), })).ToList<resultline>();</code>
Beispieldaten
Die erwarteten Ergebnisse
Lösung
<code class="language-csharp">List<cartline> Lines = new List<cartline>(); Lines.Add(new CartLine() { ProductCode = "p1", Price = 6.5M, Name = "Product1" }); Lines.Add(new CartLine() { ProductCode = "p1", Price = 6.5M, Name = "Product1" }); Lines.Add(new CartLine() { ProductCode = "p2", Price = 12M, Name = "Product2" });</code>
Das Problem liegt in der Verwendung von , um jedes Projekt in jeder Gruppe zu überprüfen. Der richtige Ansatz ist:
<code>Product1: count 2 - Price:13 (2x6.5) Product2: count 1 - Price:12 (1x12)</code>
verwenden, um den Produktnamen zu erhalten. Die Ausstellungsstelle setzt das Ergebnissatz fest, was zu Zählfehlern führt, und betreibt die Ergebnisse nach der Gruppierung direkt.
Diese Revisions -Antwort behält das Bild bei und liefert eine genauere Erklärung des LINQ -Problems und der LösungDas obige ist der detaillierte Inhalt vonWie gruppiert, summiert und zählt man Produkte in LINQ mit GroupBy richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!