Quelle serait la bonne façon de trier une liste de chaînes où je veux que les éléments commençant par un trait de soulignement "_" soient au bas de la liste, sinon tout est alphabétique.
En ce moment, je fais quelque chose comme ça,
autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a )
Si vous voulez une commande personnalisée, mais ne voulez pas fournir un comparateur, vous pouvez l'avoir - style sql:
autoList
.OrderBy(a => a.StartsWith("_") ? 2 : 1 )
.ThenBy(a => a);
Je pense que vous devez utiliser OrderBy(Func<>, IComparer<>)
et spécifier votre propre Comparer
qui implémentera votre logique personnalisée.
Utilisez la surcharge de OrderBy qui prend un IComparer
, le premier argument Func
alimentera le comparateur, et à partir de là, vous devez comparer les chaînes. Traitez d'abord le cas de l'un ou des deux commence par _
, et à partir de là, vous devrez probablement retirer le _
et utilisez simplement la norme string.Compare
pour les trier au-delà du premier _