1

我对 Linq 还很陌生,所以请放轻松。我正在创建一个博客站点,而不是使用罐装解决方案,并且我正在使用 MVC 3 构建它。我有一个按年份显示帖子的存档页面。在存储库中,代码是:

IEnumerable<IGrouping<int, Post>> groupedPosts = _dataContext.Posts
            .GroupBy(s => s.PostDate.Year)
            .OrderByDescending(p => p.Key).ToList();

如您所见,我正在列出一个帖子列表并按年份对它们进行分组。在这种情况下,关键当然是年份。在视图中,我遍历集合,一切都正确显示。但是,我注意到当我插入一个新帖子时,因为我是按年份排序的,所以组内的新帖子被放在了底部并且已经过时了。例如,在插入 2013 年 4 月 20 日的帖子后,存档显示以下内容:-

2013
Aha, I'm back
Posted: 15 April 2013
Aha, I'm back
Posted: 07 April 2013
Thinking Too Much
Posted: 02 March 2013
Blog 2 Title Category XHTML
Posted: 02 February 2013
Latest Blog Post
Posted: 20 April 2013

看看我的最新帖子应该在每个分组的顶部时如何放在堆的底部。我知道我需要以某种方式订购帖子,但不知道该怎么做。有没有一种简单的方法可以对每个组内的帖子进行排序,所以最新的帖子放在每个组的顶部。感谢您的帮助。

4

2 回答 2

1

您应该订购两次 - 每个组内的项目一次,组内的第二次:

var groupedPosts = _dataContext.Posts
            .GroupBy(s => s.PostDate.Year)
            .OrderByDescending(p => p.Key)
            .Select(g = new { g.Key, Items =  g.OrderByDescending(x => x.PostDate) })
            .ToList();
于 2013-04-20T21:20:38.907 回答
1
IEnumerable<IGrouping<int, Post>> groupedPosts = _dataContext.Posts
  .AsEnumerable()  //we're pulling the whole table, might as well make it official.
  .OrderByDescending(s => s.PostDate)
  .GroupBy(s => s.PostDate.Year)  //Enumerable.GroupBy retains the order in the groups
  .OrderByDescending(g => g.Key)
  .ToList();
于 2013-04-21T04:25:28.983 回答