Подтвердить что ты не робот

Пользовательская логика сортировки в OrderBy с использованием LINQ

Каким будет правильный способ сортировки списка строк, где мне нужны элементы, начинающиеся с подчеркивания '_', в нижней части списка, иначе все будет в алфавитном порядке.

Сейчас я делаю что-то вроде этого,

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

Ответ 1

Если вам нужен пользовательский заказ, но вы не хотите поставлять его, вы можете получить его - sql style:

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

Ответ 2

Я думаю, вам нужно использовать OrderBy(Func<>, IComparer<>) и указать свой собственный Comparer, который будет реализовывать вашу пользовательскую логику.

Ответ 3

Используйте перегрузку OrderBy, которая принимает IComparer, первый аргумент Func будет кормить компаратора, а оттуда вам нужно сравнить строки. Сначала рассмотрите случай с одним или обоими запусками с _, а затем оттуда вам, вероятно, понадобится стянуть _ и просто использовать стандартный string.Compare, чтобы отсортировать их за пределами первого _