2010-10-12 5 views
2

Как отсортировать два объекта в списке, используя два свойства по возрастанию, а другое по убыванию. когда используется linq, он говорит, что мне нужно реализовать интерфейс IComparer, но не уверен, как сравнивать два объекта, используя сразу два свойства.Сравнение двух объектов по двум свойствам

Say Person class по названию по возрастанию и по убыванию.

ответ

11

Ну, вы должны решить, что ваш первичного сравнения. Используйте только сравнение , если первое дает равенство. Например:

public int Compare(Person p1, Person p2) 
{ 
    int primary = p1.Name.CompareTo(p2.Name); 
    if (primary != 0) 
    { 
     return primary; 
    } 
    // Note reverse order of comparison to get descending 
    return p2.Age.CompareTo(p1.Age); 
} 

(Это можно записать более компактно по-разному, но я держал его очень четко, чтобы вы могли понять концепцию.)

Обратите внимание, что в MiscUtil у меня есть некоторые строительные блоки так что вы можете легко построить компараторов с помощью лямбда-выражения, составляют компараторов и т.д.

5

Если вы хотите создать новую копию списка (так что вы до сих пор первоначальный порядок в своем первоначальном списке), вы можете сделать это:

List<Person> unsortedList; 

sortedList = unsortedList.OrderBy(p => p.Name).ThenByDescending(p => p.Age); 
Смежные вопросы