Ответ 1
Если вам нужен пользовательский заказ, но вы не хотите поставлять его, вы можете получить его - sql style:
autoList
.OrderBy(a => a.StartsWith("_") ? 2 : 1 )
.ThenBy(a => a);
Каким будет правильный способ сортировки списка строк, где мне нужны элементы, начинающиеся с подчеркивания '_', в нижней части списка, иначе все будет в алфавитном порядке.
Сейчас я делаю что-то вроде этого,
autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a )
Если вам нужен пользовательский заказ, но вы не хотите поставлять его, вы можете получить его - sql style:
autoList
.OrderBy(a => a.StartsWith("_") ? 2 : 1 )
.ThenBy(a => a);
Я думаю, вам нужно использовать OrderBy(Func<>, IComparer<>)
и указать свой собственный Comparer
, который будет реализовывать вашу пользовательскую логику.
Используйте перегрузку OrderBy, которая принимает IComparer
, первый аргумент Func
будет кормить компаратора, а оттуда вам нужно сравнить строки. Сначала рассмотрите случай с одним или обоими запусками с _
, а затем оттуда вам, вероятно, понадобится стянуть _
и просто использовать стандартный string.Compare
, чтобы отсортировать их за пределами первого _