2012-09-04 21 views
31

Ich habe ein Objekt, das wie folgt aussieht:Zählen mit Gruppen von Linq

Notice 
{ 
    string Name, 
    string Address 
} 

In einem List<Notice> I zur Ausgabe All eindeutigen Namen wollen und wie oft besonders in der Sammlung erscheint.

Zum Beispiel:

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

Ich möchte die Ausgabe

Travel - 2 
PTO - 1 
Direct -1 

ich die eindeutigen Namen in Ordnung mit diesem Code bekommen, aber ich kann nicht scheinen, um die Zählungen alle in 1 Linq Erklärung zu bekommen

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

Antwort

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

A Variation auf Leniel Antwort unter Verwendung einer different overload of GroupBy:

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

Im Grunde ist es elides nur die Select Anruf.

+0

Nice one Jon. :) –

Verwandte Themen