Bir ürün koleksiyonum var
public class Product {
public Product() { }
public string ProductCode {get; set;}
public decimal Price {get; set; }
public string Name {get; set;}
}
Şimdi koleksiyonu ürün koduna göre gruplamak ve her kod için adı, numarası veya ürünleri ve her ürünün toplam fiyatını içeren bir nesne döndürmek istiyorum.
public class ResultLine{
public ResultLine() { }
public string ProductName {get; set;}
public string Price {get; set; }
public string Quantity {get; set;}
}
Bu nedenle, ProductCode'a göre gruplamak için bir GroupBy kullanıyorum, ardından toplamı hesaplıyorum ve ayrıca her ürün kodu için kayıt sayısını sayıyorum.
Şu ana kadar sahip olduğum şey bu:
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>();
Bazı nedenlerden dolayı, toplam doğru yapılır ancak sayı her zaman 1'dir.
Örnek verileri:
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" });
Örnek verilerle sonuç:
Product1: count 1 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Ürün 1, sayı = 2 olmalıdır!
Bunu basit bir konsol uygulamasında simüle etmeye çalıştım ancak aşağıdaki sonucu aldım:
Product1: count 2 - Price:13 (2x6.5)
Product1: count 2 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Ürün1: yalnızca bir kez listelenmelidir ... Yukarıdakinin kodu pastebin'de bulunabilir: http://pastebin.com/cNHTBSie