【问题标题】:Group posts by year, then by month按年分组帖子,然后按月分组
【发布时间】:2011-06-17 02:45:17
【问题描述】:

我需要一些有关 LINQ-2-SQL 的帮助,以便按年份和月份对一些博客文章进行分组。

基本上,我有一组具有以下属性的博客文章

  • 身份证
  • 标题
  • 日期

我希望能够遍历每一年,然后遍历该年的每个月,最后遍历该月内的所有博客文章。像

  • 2011
    • 四月(显示帖子数)
      • 随机发帖 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() });

【问题讨论】:

  • 如果您只想在帖子中以缩进格式列出所有博客帖子,按日期对所有帖子进行排序并循环处理缩进可能会更容易,但我可能会错过了什么。
  • 不相关,但您可能还需要考虑按降序排列月份。所以最近的在最上面。
  • 谢谢@pickypg:我会在分组排序后立即订购。 @Chris,我认为您可能会遗漏一些东西,我不太明白如何通过循环浏览每个帖子来对所有内容进行分组。

标签: c# linq


【解决方案1】:

我还没有实际测试过这个,但它看起来像一个开始,通过查看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 标题下查看。

【讨论】:

  • 就是这样 =) 非常感谢。
【解决方案2】:

如果您不想进行预测并将它们保留为分组,这里有一个替代方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多