Reputation: 8188
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();
Upvotes: 32
Views: 57803
Reputation: 102408
var noticesGrouped = notices.GroupBy(n => n.Name).
Select(group =>
new
{
NoticeName = group.Key,
Notices = group.ToList(),
Count = group.Count()
});
Upvotes: 59
Reputation: 1500495
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.
Upvotes: 50