2008-12-12 14 views
33

मैं फ्रेमवर्क 3.5 पर सी # का उपयोग कर रहा हूं। मैं दो गुणों से एक जेनेरिक सूची <> को जल्दी से समूहित करना चाहता हूं। इस उदाहरण के लिए कहें कि मेरे पास ग्राहक आईडी, ProductId, और ProductCount के गुणों के साथ ऑर्डर प्रकार की एक सूची है। मैं lambda अभिव्यक्ति का उपयोग कर ग्राहक आईडी और ProductId द्वारा समूहित उत्पाद गणना का योग कैसे प्राप्त करूं?सी # सूची <> समूहबी 2 मान

उत्तर

56
var sums = Orders.GroupBy(x => new { x.CustomerID, x.ProductID }) 
       .Select(group => group.Sum(x => x.ProductCount)); 
7

फिर, आप प्रत्येक राशि के लिए आईडी प्राप्त करना चाहते हैं, तो आप इस

var customerAndProductGroups = 
    from order in Orders 
    orderby order.CustomerID, order.ProductID // orderby not necessary, but neater 
    group order by new { order.CustomerID, order.ProductID }; 

foreach (var customerAndProductGroup in customerAndProductGroups) 
{ 
    Console.WriteLine("Customer {0} has ordered product {1} for a total count of {2}", 
     customerAndProductGroup.Key.CustomerID, 
     customerAndProductGroup.Key.ProductID, 
     customerAndProductGroup.Sum(item => item.ProductCount)); 
} 
16

कर सकता है मुझे पता है इस सूत्र बहुत पुरानी है लेकिन जब से मैं सिर्फ इस वाक्य रचना के माध्यम से संघर्ष किया मैंने सोचा था कि मैं ' मेरी अतिरिक्त निष्कर्ष पोस्ट डी - आप योग और आईडी (/ ओ foreach डब्ल्यू) एक क्वेरी में तो जैसे लौट सकते हैं: के लिए मुझे पाने के लिए यह काम करने के लिए

var sums = Orders 
      .GroupBy(x => new { x.CustomerID, x.ProductID }) 
      .Select(group =>new {group.Key, ProductCount = group.Sum(x => x.ProductCount)}); 

मुश्किल बात यह है कि योग एलियास किया जाना चाहिए, जाहिर है ...

+0

मुझे एहसास है कि यह उत्तर बहुत पुराना है, लेकिन अगर कोई सोच रहा था कि उपनाम आवश्यक क्यों है, गुण अंतर्निहित फ़ील्ड नाम उत्पन्न करते हैं लेकिन विधियां नहीं होती हैं। – Jimmy

-1

var new1 = EmpList.GroupBy (z => z.Age) .उडरबी (कर्मचारी => कर्मचारी.के);

डेटाग्रिड व्यू 1। डेटासोर्स = न्यू 1;

+0

यह उत्तर प्रश्न पर लागू नहीं होता है। – Bryan