Logica di ordinamento personalizzata in OrderBy con LINQ

Quale sarebbe il modo giusto per ordinare una lista di stringhe in cui voglio elementi che iniziano con un carattere di sottolineatura ‘_’, in fondo alla lista, altrimenti tutto è in ordine alfabetico.

In questo momento sto facendo qualcosa di simile,

autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a ) 

Se si desidera l’ordinamento personalizzato, ma non si desidera fornire un confronto, è ansible averlo – stile sql:

 autoList .OrderBy(a => a.StartsWith("_") ? 2 : 1 ) .ThenBy(a => a); 

Penso che sia necessario utilizzare OrderBy(Func<>, IComparer<>) e specificare il proprio Comparer che implementerà la logica personalizzata.

Usa il sovraccarico di OrderBy che accetta un IComparer , il primo argomento Func alimenterà il comparatore e da lì dovrai confrontare le stringhe. Prima tratta il caso di uno o entrambi inizia con _ , e poi da lì probabilmente dovrai togliere il _ e usare solo la string.Compare standard. string.Compare per ordinarli oltre il primo _