2013-09-27 78 views
-3

如何对3个变量列表进行排序?如何对列表中的元素进行多重排序

screencapture

名单有三个值:clusCode,DocCode和x值。

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

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

这个问题确实很不明确。图像链接没有任何理由(它只是文本),但是你应该在问题中包含所有相关信息。 –

回答

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) 
+1

这不是您在查询表达式中表达多个排序的方式。 –

+0

@Jon ....我将lambda语法与查询表达式相结合。感谢您指出。 – AlwaysAProgrammer

2

尝试这样的: -

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

那么,它会创建一个新列表 - 但它只使用其中一个字段,并且会以错误的意义使用该字段(OP要先获得最高的xValue)。 –

+0

@JonSkeet: - 谢谢指出。更新了我的答案! –

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

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

+0

@RahulTripathi:你的意思是“那不好”?我们的答案都使用LINQ,但是您只需要通过单个字段(按错误顺序)下单。 –

+0

对不起,我错过了显而易见的!再次抱歉!! :( –

相关问题