2011-02-08 12 views
15

में मैं आईडी ठीक से एक सूची <> में संग्रहीत की एक सूची है। अब मुझे इस सूची को समूहबद्ध करने और अवरोही क्रमबद्ध घटनाओं की संख्या की गिनती करने की आवश्यकता है।LINQ: आदेश अद्वितीय आइटम की गणना करके सूची <string>

उदाहरण:

List<string> aryIDs = new List<string>; 
aryIDs.Add("1234"); 
aryIDs.Add("4321"); 
aryIDs.Add("3214"); 
aryIDs.Add("1234"); 
aryIDs.Add("4321"); 
aryIDs.Add("1234"); 

उत्पादन करेगा:

"1234", 3 
"4321", 2 
"3214", 1 

यह TSQL में आसान होगा, लेकिन मैं सर्वर गोल यात्रा, अनावश्यक टेबल, आदि यदि संभव हो तो से बचने के लिए चाहते हैं।

अग्रिम धन्यवाद।

अद्यतन: नीचे राल्फ Shillington के जवाब के लिए VB.NET रूपांतरण:

Dim result = From id In aryIDs _ 
        Group id By id Into Group _ 
        Order By Group.Count() Descending _ 
        Select id, Count = Group.Count() 

result.Dump() 
+1

आप उल्लेख T-SQL ... तुम्हारा मतलब है, यह सब डेटा डेटाबेस में है? इसे पहले से ही समूहीकृत और क्रमबद्ध क्यों नहीं लाया जाए? या मैं कुछ गलत समझ रहा हूँ? –

उत्तर

18
List<string> aryIDs = new List<string>(); 
aryIDs.Add("1234"); 
aryIDs.Add("4321"); 
aryIDs.Add("3214"); 
aryIDs.Add("1234"); 
aryIDs.Add("4321"); 
aryIDs.Add("1234"); 

var result =  from id in aryIDs 
group id by id into g 
orderby g.Count() descending 
select new { Id=g.Key, Count=g.Count() }; 

result.Dump(); 

कट और पेस्ट कि LINQPad में और आप के लिए अच्छा होना चाहिए चले जाओ।

यह भी रूप में लैम्ब्डा अभिव्यक्ति का उपयोग करते लिखा जा सकता है:

aryIDs.GroupBy (id => id).OrderByDescending (id => id.Count()).Select(g => new { Id=g.Key, Count=g.Count()}).Dump(); 
+0

बिल्कुल सही, धन्यवाद। इससे पहले कि मैं इस तरह के लिए पूछ सकता हूं आप भी अपडेट किया। :) –

+0

@ राल्फ: लैम्ब्डा अभिव्यक्ति में इस क्वेरी कथन के बराबर क्या है? –

+0

@ सैंटोश - मैंने लैम्ब्डा अभिव्यक्ति को शामिल करने के उत्तर को भी अपडेट किया। –

संबंधित मुद्दे