मैं उत्पादों की एक संग्रह हैLinq: GroupBy, योग और गणना
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)
उत्पाद 1: केवल एक बार सूचीबद्ध किया जाना चाहिए ... के लिए ऊपर pastebin पर पाया जा सकता कोड : http://pastebin.com/cNHTBSie
ठीक है मेरा कंसोल ऐप काम कर रहा है। पहले() का उपयोग करने के लिए मुझे इंगित करने के लिए धन्यवाद और SelectMany छोड़ दें। परिणाम रेखा वास्तव में एक व्यूमोडेल है।कीमत मुद्रा संकेत के साथ स्वरूपित हो जाएगी। यही कारण है कि मुझे इसे एक स्ट्रिंग होने की आवश्यकता है। लेकिन मैं मात्रा को int में बदल सकता हूं .. अब मैं देखूंगा कि यह मेरी वेबसाइट के लिए भी मदद कर सकता है। मैं आपको बता दूँगा। – ThdK
@ThdK: नहीं, आपको 'प्राइस' को दशमलव के रूप में भी रखना चाहिए, और फिर इसे प्रारूपित करें कि आप इसे कैसे प्रारूपित करते हैं। डेटा प्रतिनिधित्व को साफ रखें, और अंतिम संभव पल में केवल प्रेजेंटेशन व्यू में बदलें। –
क्यों उत्पाद कोड और नाम से समूह नहीं करना है? ऐसा कुछ: .GroupBy (l => नया {l.ProductCode, l.Name}) और ProductName = c.Key.Name, –