Ich habe eine Sammlung von Produkten
public class Product {
public Product() { }
public string ProductCode {get; set;}
public decimal Price {get; set; }
public string Name {get; set;}
}
Jetzt möchte ich die Sammlung basierend auf dem Produktcode gruppieren und ein Objekt zurückgeben, das den Namen, die Nummer oder die Produkte für jeden Code und den Gesamtpreis für jedes Produkt enthält.
public class ResultLine{
public ResultLine() { }
public string ProductName {get; set;}
public string Price {get; set; }
public string Quantity {get; set;}
}
Also benutze ich ein GroupBy, um nach ProductCode zu gruppieren, dann berechne ich die Summe und zähle auch die Anzahl der Datensätze für jeden Produktcode.
Das habe ich bisher:
List<Product> Lines = LoadProducts();
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>();
Aus irgendeinem Grund wird die Summe korrekt gemacht, aber die Zählung ist immer 1.
Sampe Daten:
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" });
Ergebnis mit Beispieldaten:
Product1: count 1 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Produkt 1 sollte count = 2 haben!
Ich habe versucht, dies in einer einfachen Konsolenanwendung zu simulieren, aber dort habe ich das folgende Ergebnis erhalten:
Product1: count 2 - Price:13 (2x6.5)
Product1: count 2 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Produkt1: sollte nur einmal aufgeführt werden ... Der Code für die oben genannten Informationen finden Sie auf pastebin: http://pastebin.com/cNHTBSie