2012-09-04 19 views
31

Mam obiekt, który wygląda tak:Liczenie Korzystanie Grupa Poprzez Linq

Notice 
{ 
    string Name, 
    string Address 
} 

w A List<Notice> Chcę wyjściowego odmiennymi Imię i ile razy pojawia się zwłaszcza w kolekcji.

Na przykład:

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

chcę wyświetlamy

Travel - 2 
PTO - 1 
Direct -1 

można uzyskać różne nazwy w porządku z tym kodem, ale nie wydaje się uzyskać liczy się wszystko w 1 oświadczenie linq

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

Odpowiedz

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

wariacja na odpowiedź Leniel za, przy użyciu different overload of GroupBy:

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

zasadzie to tylko elides połączenia Select.

+0

Przyjemny Jon. :) –