1

このリストが適切にソートされない理由を、一生理解できません。誰かが私が間違っていることを指摘できますか?

List<WNBlogPost> posts = new List<WNBlogPost>();

IEnumerable<WNBlogPost> orderedPosts = (
    from p in posts
    select p
).OrderByDescending(c => c.ID);

foreach (WNBlogPost post in orderedPosts) {
    //output post to page
}

ループで投稿リストにアイテムを追加していますが、リストに追加される順序は、OrderByDescending() を追加した後に表示される順序と同じです。

私が間違っていることは何ですか?

4

1 に答える 1

12

LINQ クエリは (外部の努力なしで) 操作対象のコレクションに副作用をもたらしません。したがって、からアクセスできるOrderByDescending並べ替えられたビューのみが表示されます。postsorderedPosts

// hat-tip: @JimSchubert
foreach (var post in orderedPosts)
{
    Frob(post); // these will be frobbed in descending order
}

実際のリスト自体をソートしたい場合は、次を使用する必要がありますList<T>.Sort

// utilize the Comparison<T> overload of List<T>.Sort to perform a
// descending sort based on the post ID
posts.Sort((post1, post2) => -post1.ID.CompareTo(post2.ID));
于 2012-04-19T18:05:02.957 に答える