Voici deux méthodes d'extension permettant de trier une liste d'objets (IEnumerable) suivant le nom de l'une de ses propriétés. Très pratique dans le cadre du trie d'un GridView :).
/// <summary>
/// Méthodes d'extensions des collections
/// </summary>
public static class CollectionExtensions
{
#region Trier
/// <summary>
/// Méthode pemettant de tier une liste d'objets
/// en fonction d'une propriété et d'une direction
/// </summary>
/// <typeparam name="T">Type des objets présents dans la collection</typeparam>
/// <param name="liste">Collection d'objets</param>
/// <param name="property">Nom de lapropriété utilisée pour le trie</param>
/// <param name="direction">Direction du trie</param>
/// <returns>Collection d'objets triés</returns>
public static IEnumerable<T> Sort<T>(this IEnumerable<T> liste, string property, SortDirection direction)
{
if (string.IsNullOrEmpty(property))
{
return liste;
}
Func<T, object> exp =
item =>
item.GetType().InvokeMember(property, System.Reflection.BindingFlags.GetProperty, null, item, null);
if (direction == SortDirection.Ascending)
{
return liste.OrderBy(exp);
}
else
{
return liste.OrderByDescending(exp);
}
}
/// <summary>
/// Méthode pemettant de tier une liste d'objets
/// en fonction d'une propriété et de l'oposé d'une direction
/// </summary>
/// <typeparam name="T">Type des objets présents dans la collection</typeparam>
/// <param name="liste">Collection d'objets</param>
/// <param name="property">Nom de lapropriété utilisée pour le trie</param>
/// <param name="direction">Direction du trie</param>
/// <returns>Collection d'objets triés</returns>
public static IEnumerable<T> SortInvers<T>(this IEnumerable<T> liste, string property, SortDirection direction)
{
return liste.Sort<T>(
property,
direction == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending);
}
#endregion
}
