通过两个属性比较两个对象
问题描述:
如何通过使用两个属性按升序排列而另一个按降序排序列表中的两个对象。当使用LINQ它说我需要实现IComparer接口,但不知道如何通过一次使用两个属性来比较两个对象。通过两个属性比较两个对象
按人名升序和年龄降序说人员类别。
答
那么,你需要决定哪个是你主要比较。如果第一个给出相等,则仅使用次要比较。例如:
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等
答
,你可以这样做:
List<Person> unsortedList;
sortedList = unsortedList.OrderBy(p => p.Name).ThenByDescending(p => p.Age);