Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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() });
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
257 views
Welcome To Ask or Share your Answers For Others

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...