2012-05-30 23 views
18

में अद्वितीय तत्वों की गणना करें मेरे पास एक सूची है जिसमें केवल स्ट्रिंग हैं। मुझे क्या करना पसंद है समूह द्वारा गिनती और वापसी करना है।GroupBy और सूची

उदाहरण के लिए:

Foo1 
Foo2 
Foo3 
Foo1 
Foo2 
Foo2 

Foo1 में परिणाम होगा: 2, foo2: 3, Foo3: 1. मैं Linq के साथ की कोशिश की है, लेकिन सूची एक GroupBy कि चाल हो सकती है, लेकिन मैं इसे गड़बड़ अप, उपयोग :(

उत्तर

34
var list = new List<string> { "Foo1", "Foo2", "Foo3", "Foo2", "Foo3", "Foo3", "Foo1", "Foo1" }; 

var grouped = list 
    .GroupBy(s => s) 
    .Select(group => new { Word = group.Key, Count = group.Count() }); 
+0

बहुत बढ़िया, धन्यवाद! – Jason94

5
var items= myList 
    .GroupBy(g => g) 
    .Select(t => new {count= t.Count(), key= t.Key }); 

foreach (var group in items) 
    Console.WriteLine (group.key + " " + group.count); 
1
var grouped = select new 
    { 
     Foo= grp.Key, 
     Bar= grp.Select(x => x.SomeField).Distinct().Count() 
    }; 

करेंनॉर्थविंडडेटाबेस के साथ एक काम कर उदाहरण समझ नहीं सकता, ताकि आप जाँच कर सकते हैं ::

NWindCustomersDataContext dc = new NWindCustomersDataContext(); 


    var query = (from c in dc.Customers 
       join o in dc.Orders on c.CustomerID equals o.CustomerID 
       group o by c.CustomerID into g 
       select new 
       { 
        CustomerID = g.Key, 
        Company = (from cust in dc.Customers 
           where cust.CustomerID == g.Key 
           select cust).ToList(), 
        Count = g.Select(x => x.OrderID).Distinct().Count() 
       }).OrderByDescending(y => y.Count); 




    foreach (var item in query) 
    { 
     Response.Write("CustomerID: " + item.CustomerID + "</br>" + "CompanyName: " + item.Company[0].CompanyName.ToString() + "</br>"); 


    } 

Here आप एक बहुत अच्छा उदाहरण मिल सकते हैं

0

एक अच्छा समाधान कुंजी द्वारा http://msdn.microsoft.com/en-us/library/vstudio/bb534304(v=vs.100).aspx यह समूह डेटा पर उपलब्ध है; प्रत्येक कुंजी में यह डेटा की अपनी सूची होती है जिसे आप इसके ऊपर पुन: सक्रिय कर सकते हैं।

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