如何使用两个排序规则对列表进行排序?

时间:2011-03-09 10:37:30

标签: c# .net linq

我有一个列表,我想用参数排序。这意味着它都是值,例如我有

A    2/2
B    3/3
C    3/4

我想要排序C B A

我试图通过以下方式实现:

methods.Sort((y, x) => x.GetChangingMethodsCount().CompareTo(y.GetChangingMethodsCount()));
            methods.Sort((y, x) => x.GetChangingClassesCount().CompareTo(y.GetChangingClassesCount()));

首先使用第二个参数对列表进行排序,然后使用第一个参数再次对其进行排序。但排序并不正确。任何暗示如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

您需要做的是将两个排序键合并为一个功能。如果第一个比较返回0,则只尝试第二个:

methods.Sort((y, x) => 
{
    int sort = x.GetChangingClassesCount().CompareTo(y.GetChangingClassesCount());
    if (sort == 0)
        sort = x.GetChangingMethodsCount().CompareTo(y.GetChangingMethodsCount());
    return sort;
});

答案 1 :(得分:3)

可能最简单的方法是使用OrderByThenBy扩展方法:

methods.OrderByDescending(x => x.GetChangingMethodCount()).
        ThenByDescending(x => x.GetChangingClassesCount()).
        ToList();

答案 2 :(得分:2)

至少(至少对我来说)根据你的例子,这是否是你想要的,但你可以尝试一下:

var sortedMethods = methods.OrderByDescending(m => m.GetChangingMethodsCount()).ThenByDescending(m => m.GetChangingClassesCount());