按年份分组,然后按月分组

时间:2011-06-17 02:45:18

标签: c# linq

我需要一些LINQ-2-SQL的帮助才能将一些博客文章分组一年和一个月。

基本上,我有一系列具有以下属性的博客帖子

  • 编号
  • 标题
  • 日期

我希望能够遍历每年,然后遍历那一年的每个月,最后,遍历那个月内的每篇博文。像

这样的东西
  • 2011
    • 四月(显示帖子数量)
      • Random Post 1
      • 随机发布2
    • 可以(显示帖子数量)
      • 随机发布2

等......

有没有办法可以使用group by子句使用单个LINQ查询执行此操作?

就我而言

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

2 个答案:

答案 0 :(得分:10)

我实际上没有对此进行过测试,但它看起来像一个开始,通过查看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 }
                    };

GroupBy - Nested标题下查看。

答案 1 :(得分:5)

如果您不想进行投影并将其保留为分组,则可以选择此选项。

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