2009-11-11 3 views

Répondre

3

OrderBy triera par ordre croissant, décroissant pour, utilisez OrderByDescending:

q = q.OrderByDescending(p => p.Total); 

Et si vous souhaitez commander plusieurs colonnes, utilisez le ThenBy et ThenByDescending méthodes.

q = q.OrderBy(p => p.Col1).ThenByDescending(p => p.Col2); 
4

Il y a une autre méthode pour cela, OrderByDescending

Un peu d'un surpuissant, probablement, mais si vous voulez vraiment être en mesure de passer un paramètre indiquant l'ordre de tri, vous pouvez créer une méthode d'extension:

public static IOrderedEnumerable<TResult> OrderBy<TResult,TKey>(this IEnumerable<TResult> source, Func<TResult, TKey> keySelector, bool ascending) 
{ 
    Func<Func<TResult, TKey>, IOrderedEnumerable<TResult>> orderMethod = source.OrderBy; 

    if(!ascending) 
     orderMethod = source.OrderByDescending; 

    return orderMethod.Invoke(keySelector); 
} 

de cette façon, vous seriez en mesure de le faire

bool ascending = true; 
list.OrderBy(item => item.Name, ascending); 
Questions connexes