Пользовательская логика вида в OrderBy с помощью LINQ

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

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

autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a )
48
задан Bala R 9 June 2010 в 19:55
поделиться

3 ответа

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

autoList
.OrderBy(a => a.StartsWith("_") ? 2 : 1 )
.ThenBy(a => a);
97
ответ дан 26 November 2019 в 18:40
поделиться

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

6
ответ дан 26 November 2019 в 18:40
поделиться

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

2
ответ дан 26 November 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: