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

Список сортировки в С# с LINQ

Я хочу отсортировать список на С#.

Как и в случае, когда свойство структуры AVC переходит в true, сначала показывайте его, затем AVC переходит в значение false. Есть ли способ сделать это в С# LINQ?

4b9b3361

Ответ 1

Ну, самый простой способ использования LINQ будет примерно таким:

list = list.OrderBy(x => x.AVC ? 0 : 1)
           .ToList();

или

list = list.OrderByDescending(x => x.AVC)
           .ToList();

Я считаю, что естественный порядок значений bool равен false < true, но первая форма делает его более понятным ИМО, потому что все знают, что 0 < 1.

Обратите внимание, что это не приведет к сортировке самого исходного списка - он создаст новый список и вернет ссылку обратно переменной list. Если вы хотите сортировать на месте, вы должны использовать метод List<T>.Sort.

Ответ 2

Как это?

В LINQ:

var sortedList = originalList.OrderBy(foo => !foo.AVC)
                             .ToList();

Или на месте:

originalList.Sort((foo1, foo2) => foo2.AVC.CompareTo(foo1.AVC));

Как говорит Джон Скит, трюк здесь означает, что false считается "меньшим", чем true.

Если вы обнаружите, что выполняете эти операции упорядочения в разных местах своего кода, вы можете получить свой тип Foo для реализации интерфейсов IComparable<Foo> и IComparable.

Ответ 3

Я предполагаю, что вы хотите, чтобы они были отсортированы с помощью чего-то еще, чтобы получить последовательный порядок между всеми элементами, где AVC одинакова. Например, по имени:

var sortedList = list.OrderBy(x => c.AVC).ThenBy(x => x.Name).ToList();