2011-09-02 2 views
3

J'ai une liste générique que je forme à partir de deux autres listes. Le orderby ne semble pas fonctionner correctement. BeOrders vient en premier (commandé par date) puis BTOrders (commandé par date). Ai-je manqué quelque chose d'évident? Je ne vois rien de mal.Orderby dans la liste générique

orders = new List<DataLayer.OrderStatusItem>(); 
orders.AddRange(BeOrders); 
orders.AddRange(BTOrders); 

orders.OrderBy(z => z.ordered); 

Répondre

12

Oui, vous avez manqué que OrderBy ne commande en place - il retours une séquence ordonnée:

var inOrder = orders.OrderBy(z => z.ordered); 

Or (en supposant que orders est de type List<...>:

orders = orders.OrderBy(z => z.ordered).ToList(); 

Notez que cette « aucun effet secondaire » approche est répandue dans LINQ - aucun des opérateurs changer la collection qu'ils sont appelés; ils retournent une vue sur cette collection de quelque forme (filtrée, projetée etc.).

Si vous souhaitez trier un List<T> en place, vous pouvez utiliser List<T>.Sort. (Vous devrez cependant spécifier la commande d'une manière différente.)

7

OrderBy retourne un IOrderedEnumerable<T>, donc vous devez l'assigner à une variable:

orders = orders.OrderBy(z => z.ordered);