Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
270 views
in Technique[技术] by (71.8m points)

c# - 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

  • 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

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

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...