2012-09-04 14 views
31

Ho un oggetto che assomiglia a questo:Counting Utilizzare Raggruppa per Linq

Notice 
{ 
    string Name, 
    string Address 
} 

In un List<Notice> voglio uscita Tutti Nome distinto e quante volte il particolare compare nella collezione.

Ad esempio:

Notice1.Name="Travel" 
Notice2.Name="Travel" 
Notice3.Name="PTO" 
Notice4.Name="Direct" 

voglio l'uscita

Travel - 2 
PTO - 1 
Direct -1 

posso ottenere i nomi distinti bene con questo codice, ma io non riesco a ottenere i conteggi tutto in 1 dichiarazione LINQ

theNoticeNames= theData.Notices.Select(c => c.ApplicationName).Distinct().ToList(); 

risposta

56
var noticesGrouped = notices.GroupBy(n => n.Name). 
        Select(group => 
         new 
         { 
          NoticeName = group.Key, 
          Notices = group.ToList(), 
          Count = group.Count() 
         }); 
48

A variazione sul risposta di Leniel, utilizzando un different overload of GroupBy:

var query = notices.GroupBy(n => n.Name, 
       (key, values) => new { Notice = key, Count = values.Count() }); 

Fondamentalmente solo elide la chiamata Select.

+0

Bello uno Jon. :) –