2013-09-27 105 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

對不起,我錯過了顯而易見的!再次抱歉!! :( –

相關問題