Group posts by year, then by month

c#, linq

Solution

I haven't actually tested this, but it looks like a start, wrote this by looking at this msdn article:

var groupedBlogPosts =
                from p in blogPostsFiltered
                group p by p.Date.Year into yg
                select
                    new
                    {
                        Year = yg.Key,
                        MonthGroups =
                            from o in yg
                            group o by o.Date.Month into mg
                            select new { Month = mg.Key, Posts = mg }
                    };

Look under the `GroupBy - Nested` heading.

Problem

I need some help with LINQ-2-SQL in order to group some blog posts by a year and month. Basically, I have a collection of blog posts that have the following properties - Id - Title - Date I want to be able to iterate through each year, then iterate through every month of that year, and finally, iterate through every blog post within that month. Something like - 2011 - April (show number of posts) - Random Post 1 - Random Post 2 - May (show number of posts) - Random Post 2 etc... Is there a way I can do this with a single LINQ query, using the group by clause? Here's as far as I've got ``` var groupedBlogPosts = (from p in blogPostsFiltered group p by new { month = p.Date.Month, year = p.Date.Year } into d select new { postDate = string.Format("{0}/{1}", d.Key.month, d.Key.year), postCount = d.Count() }); ```

Original source