通过两个属性比较两个对象

时间:2010-10-12 09:28:39

标签: c# object compare linq-to-objects

如何使用两个属性按升序排序,另一个按降序排序,从而对列表中的两个对象进行排序。当使用linq时,它说我需要实现IComparer接口但不确定如何通过一次使用两个属性来比较两个对象。

按名称升序和年龄降序说人员类。

3 个答案:

答案 0 :(得分:12)

嗯,您需要确定哪个是主要比较。如果第一个给出相等,则仅使用 secondary 比较。例如:

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表达式轻松构造比较器,组合比较器等。

答案 1 :(得分:5)

如果要创建列表的新副本(因此原始列表中仍保留原始订单),可以执行以下操作:

List<Person> unsortedList;

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

答案 2 :(得分:0)