Пользовательская логика сортировки в OrderBy с использованием LINQ - PullRequest
46 голосов
/ 09 июня 2010

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

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

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

Ответы [ 3 ]

94 голосов
/ 09 июня 2010

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

autoList
.OrderBy(a => a.StartsWith("_") ? 2 : 1 )
.ThenBy(a => a);
6 голосов
/ 09 июня 2010

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

2 голосов
/ 09 июня 2010

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

...