如何在List中对元素进行多重排序

时间:2013-09-27 16:22:41

标签: c#-4.0

如何对3个变量列表进行排序?

screencapture

该列表有三个值:clusCode,DocCode和xValue。

List<item> unSORT=new list<item>();

var okSORT=from element in unSORT
           orderby element.xValue descending
           select element;

3 个答案:

答案 0 :(得分:2)

试试这样: -

var okSort = unSort.OrderByDescending(x=> x.xValue)
               .ThenBy(x=> x.clusCode)
               .ThenBy(x=> x.DocCode)
               .ToList();

答案 1 :(得分:2)

您的问题非常不清楚,但我怀疑您想要类似的内容:

var okSORT = from element in unSORT
             orderby element.xValue descending, element.clusCode, element.DocCode
             select element;

假设您希望它主要按xValue(最大的第一个)排序,然后按clusCode排序(按字典顺序排在第一位),然后按DocCode排序(按字典顺序排在第一位)。这将返回IEnumerable<item>。如果您需要List<item>,则可以使用ToList()方法:

// orderby clause broken into multiple lines to avoid horizontal scrolling - 
// that makes no difference
var okSORT = (from element in unSORT
              orderby element.xValue descending,
                      element.clusCode,
                      element.DocCode
              select element).ToList();

此时直接使用扩展方法可能有意义:

var okSort = unSort.OrderByDescending(element => element.xValue)
                   .ThenBy(element => element.clusCode)
                   .ThenBy(element => element.DocCode)
                   .ToList();

请注意,对现有列表进行排序。如果您需要这样做,则应创建Comparer<item>并使用List<T>.Sort

强烈建议你也在为你的命名工作。类型名称,属性名称和变量名称都是非常规/不清楚的。

答案 2 :(得分:1)

使用ThenByThenByDescending子句

from element in unSort
orderby element.xvalue descending,
element.clusCode,
element.Doccode 
select element

使用lambda语法

unSort.OrderByDescending(x=>x.xvalue).ThenBy(x=>x.clusCode).ThenBy(x=>x.DocCode)