2012-09-04 39 views
31

Tengo un objeto que se parece a esto:recuento usando Agrupar por LINQ

Notice 
{ 
    string Name, 
    string Address 
} 

En un List<Notice> Deseo emitir Nombre todos distintos y cuántas veces lo particular aparece en la colección.

Por ejemplo:

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

quiero la salida

Travel - 2 
PTO - 1 
Direct -1 

puedo conseguir los nombres distintos finas con este código, pero me parece que no puede obtener la cuenta de todo en 1 declaración de LINQ

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

Respuesta

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

Un la variación en la respuesta de Leniel, utilizando un different overload of GroupBy:

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

Básicamente sólo elude la llamada Select.

+0

Nice one Jon. :) –