मेरे पास उत्पादों का एक संग्रह है
public class Product {
public Product() { }
public string ProductCode {get; set;}
public decimal Price {get; set; }
public string Name {get; set;}
}
अब मैं उत्पाद कोड के आधार पर संग्रह को समूहीकृत करना चाहता हूं और प्रत्येक कोड के लिए नाम, संख्या या उत्पादों के साथ एक वस्तु लौटाता हूं और प्रत्येक उत्पाद के लिए कुल मूल्य।
public class ResultLine{
public ResultLine() { }
public string ProductName {get; set;}
public string Price {get; set; }
public string Quantity {get; set;}
}
इसलिए मैं ProductCode द्वारा समूह के लिए GroupBy का उपयोग करता हूं, फिर मैं राशि की गणना करता हूं और प्रत्येक उत्पाद कोड के रिकॉर्ड की संख्या भी गिनता हूं।
अभी तक मेरे पास इतना ही है:
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>();
किसी कारण से, योग सही ढंग से किया जाता है लेकिन गिनती हमेशा 1 होती है।
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" });
नमूना डेटा के साथ परिणाम:
Product1: count 1 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
उत्पाद 1 की गिनती = 2 होनी चाहिए!
मैंने इसे एक साधारण कंसोल एप्लिकेशन में अनुकरण करने की कोशिश की, लेकिन मुझे निम्नलिखित परिणाम मिले:
Product1: count 2 - Price:13 (2x6.5)
Product1: count 2 - Price:13 (2x6.5)
Product2: count 1 - Price:12 (1x12)
Product1: केवल एक बार सूचीबद्ध किया जाना चाहिए ... उपरोक्त कोड पास्टबिन पर पाया जा सकता है: http://pastebin.com/cHTVie