J'ai cette extension qui gère OrderBy avec un bool de asc/desc et cela fonctionne comme un charme :

public static IOrderedEnumerable<TSource> OrderByWithDirection<TSource, TKey>
     (this IEnumerable<TSource> source,
      Func<TSource, TKey> keySelector,
      bool descending)
{
    return descending ? source.OrderByDescending(keySelector)
                      : source.OrderBy(keySelector);
}

public static IOrderedQueryable<TSource> OrderByWithDirection<TSource, TKey>
    (this IQueryable<TSource> source,
     Expression<Func<TSource, TKey>> keySelector,
     bool descending)
{
    return descending ? source.OrderByDescending(keySelector)
                      : source.OrderBy(keySelector);
}

Mais j'en ai aussi besoin pour gérer ThenBy (avec un bool de asc/desc)

La syntaxe actuelle est :

bool primaryDescending = false;
var sortedList = unSortedList
    .OrderByWithDirection(o => o.primary, primaryDescending)
    .ToList();

Ce que j'aimerais, c'est que l'extension gère quelque chose comme cette syntaxe :

bool primaryDescending = false;
bool secondaryDescending = true;
var sortedList = unSortedList
    .OrderByWithDirection(o => o.primary, primaryDescending)
    .ThenByWithDirection(o => o.secondary, secondaryDescending)
    .ToList();

Tous les conseils sur la façon de le faire seraient grandement appréciés.

c#
-2
Jippie 2 oct. 2020 à 23:00

1 réponse

Meilleure réponse

Il vous suffit de définir IOrderedQueryable.ThenByWithDirection de telle sorte qu'il appelle ThenBy___ au lieu de OrderBy___ :

public static IOrderedEnumerable<TSource> ThenByWithDirection<TSource, TKey>
     (this IOrderedEnumerable<TSource> source,
      Func<TSource, TKey> keySelector,
      bool descending)
{
    return descending ? source.ThenByDescending(keySelector)
                      : source.ThenBy(keySelector);
}

public static IOrderedQueryable<TSource> ThenByWithDirection<TSource, TKey>
    (this IOrderedQueryable<TSource> source,
     Expression<Func<TSource, TKey>> keySelector,
     bool descending)
{
    return descending ? source.ThenByDescending(keySelector)
                      : source.ThenBy(keySelector);
}
1
Dai 2 oct. 2020 à 20:51