Counting Using Group By Linq

55,191

Solution 1

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

Solution 2

A variation on Leniel's answer, using a different overload of GroupBy:

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

Basically it just elides the Select call.

Share:
55,191
Nick LaMarca
Author by

Nick LaMarca

Updated on October 22, 2020

Comments

  • Nick LaMarca
    Nick LaMarca over 3 years

    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();