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 }