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

2 回注文する必要があります。1 回は各グループ内のアイテム用、2 回目はグループ用です。

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 に答える