2012-04-19 3 views
1

Я не могу понять, почему этот список не сортируется должным образом. Может кто-то указать, что я делаю неправильно?Сортировка запроса Linq

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().

Любая идея, что я делаю неправильно?

+10

Почему бы вам использовать такой синтаксис вместо 'posts.OrderByDescending (с => c.ID)' ? –

+0

Во-первых, какой тип WNBlogPost.ID? Во-вторых, вы случайно не посмотрели бы на 'posts', а не на' orderedPosts'? –

+0

WNBlogPost.ID - это поле int – Duane

ответ

12

Запросы LINQ (без внешних усилий) не вводят побочные эффекты в коллекции, в которых они работают. Поэтому OrderByDescending представляет только отсортированный видposts, с которым вы можете получить доступ через orderedPosts.

// 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)); 
+2

Кроме того, вам нужно перечислить «orderedPosts», чтобы это было полезно: D –