J'ai une collection de produits
public class Product {
public Product() { }
public string ProductCode {get; set;}
public decimal Price {get; set; }
public string Name {get; set;}
}
Maintenant, je souhaite regrouper la collection en fonction du code produit et renvoyer un objet contenant le nom, le numéro ou les produits pour chaque code et le prix total de chaque produit.
public class ResultLine{
public ResultLine() { }
public string ProductName {get; set;}
public string Price {get; set; }
public string Quantity {get; set;}
}
J'utilise donc un GroupBy pour grouper par ProductCode, puis je calcule la somme et je compte également le nombre d'enregistrements pour chaque code produit.
Voici ce que j'ai jusqu'à présent:
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>();
Pour une raison quelconque, la somme est effectuée correctement mais le compte est toujours 1.
Données Sampe:
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" });
Résultat avec des exemples de données:
Product1: count 1 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Le produit 1 doit avoir count = 2!
J'ai essayé de simuler cela dans une application console simple mais là j'ai obtenu le résultat suivant:
Product1: count 2 - Price:13 (2x6.5)
Product1: count 2 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Product1: ne doit être répertorié qu'une seule fois ... Le code ci-dessus peut être trouvé sur pastebin: http://pastebin.com/cNHTBSie