Marko
Marko

Reputation: 72222

Group posts by year, then by month

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

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

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

Upvotes: 8

Views: 5734

Answers (2)

Jeff Mercado
Jeff Mercado

Reputation: 134881

Here's an alternative if you don't want to do the projections and leave them as groupings.

var groupedBlogPosts =
    from post in blogPostsFiltered
    group post by new { post.Date.Year, post.Date.Month } into grouped
    group grouped by new { grouped.Key.Year };

Upvotes: 5

BinaryTox1n
BinaryTox1n

Reputation: 3556

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.

Upvotes: 10

Related Questions