The Aggregate method in LINQ

One little known and scarcely document feature of LINQ is its Aggregate method. This function is very useful when you want to do something to the whole collection.

Lets say I have the follwoing BlogEntry class

public class BlogEntry  
{ 
    public Tags { get; set; } 
}

Now what do I do if I want to build a tag cloud?

I can use a dictionary and loop through like so:

var entries = GetBlogEntries();
Dictionary<string, int> tags = new Dictionary<string, int>();
foreach (BlogEntry entry in entries)
{
    foreach (string tag in entry.Tags)
    {
        if (!tags.ContainsKey(tag)) 
            tags.Add(tag, 0); 
        tags[tag]++; 
    } 
}

But the easier way is to use the built in Aggregate extension method

return entries.Aggregate(new Dictionary<string, int>(), (tags, e) 
{ 
        if (!tags.ContainsKey(tag)) 
            tags.Add(tag, 0); 
        tags[tag]++; 
        return tags;    
}