2010-10-12 436 views
2

如何通過使用兩個屬性按升序排列而另一個按降序排序列表中的兩個對象。當使用LINQ它說我需要實現IComparer接口,但不知道如何通過一次使用兩個屬性來比較兩個對象。通過兩個屬性比較兩個對象

按人名升序和年齡降序說人員類別。

回答

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我有一些積木所以你可以使用lambda表達式輕鬆構建comparers,如果你想創建列表(所以你仍然有原來的列表中的原始順序)的新副本組成comparers等

5

,你可以這樣做:

List<Person> unsortedList; 

sortedList = unsortedList.OrderBy(p => p.Name).ThenByDescending(p => p.Age);