48 votes

Logique de tri personnalisée dans OrderBy à l'aide de LINQ

Quelle serait la bonne façon de trier une liste de chaînes de caractères où je veux que les éléments commençant par un trait de soulignement '_' soient en 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 )

97voto

David B Points 53123

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);

6voto

abatishchev Points 42425

Je pense que vous devez utiliser OrderBy(Func<>, IComparer<>) et spécifier votre propre Comparer qui implémentera votre logique personnalisée.

2voto

Matt Greer Points 29401

Utilisez la surcharge de OrderBy qui prend un fichier IComparer le premier Func alimentera le comparateur, et à partir de là, vous devrez comparer les chaînes de caractères. Tout d'abord, il faut traiter le cas où l'une ou les deux commencent par _ et ensuite, à partir de là, vous aurez probablement besoin de dénuder le _ et d'utiliser simplement la norme string.Compare pour les trier au-delà du premier _

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X