Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Group posts by year, then by month

Tags:

c#

linq

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() });
like image 697
Marko Avatar asked Jun 17 '11 02:06

Marko


1 Answers

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.

like image 73
BinaryTox1n Avatar answered Oct 21 '22 01:10

BinaryTox1n