Counting Using Group By Linq

Nick LaMarca picture Nick LaMarca · Sep 4, 2012 · Viewed 52.7k times · Source

I have an object that looks like this:

Notice 
{
    string Name,
    string Address 
}

In a List<Notice> I want to output All distinct Name and how many times the particular appears in the collection.

For example:

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

I want the output

Travel - 2
PTO - 1
Direct -1

I can get the distinct names fine with this code but I can't seem to get the counts all in 1 linq statement

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

Answer

Leniel Maccaferri picture Leniel Maccaferri · Sep 4, 2012
var noticesGrouped = notices.GroupBy(n => n.Name).
                     Select(group =>
                         new
                         {
                             NoticeName = group.Key,
                             Notices = group.ToList(),
                             Count = group.Count()
                         });