2013-08-23 59 views
4

我有我的自定義對象的列表。該對象包含1個字符串和2個小數。我想根據第二個十進制字段降序排列第一個十進制字段。使用2個字段對C#進行列表排序

對於如:

object 1 -> "a", 100, 10 
object 2 -> "b", 300, 0 
object 3 -> "c", 200, 200 
object 4 -> "b", 400, 0 

將被分類爲對象3,對象1,對象4,對象2

我道歉,如果這已經回答了 - 請點我那個帖子我找不到它

+1

你應該包括'屬性你的'對象'的名字,那會更好。否則,我想答案者會「假設你有......」或者甚至不假設任何東西。 –

+1

這已經回答了[這裏](http://stackoverflow.com/questions/298725/multiple-order-by-in-linq)和[這裏](http://stackoverflow.com/questions/289010/c-尖銳一覽排序由-X-然後-Y?RQ = 1)。 –

回答

5
list.OrderByDescending(o => o.Field2) 
    .ThenByDescending(o => o.Field1); 
4
var ordered = objects.OrderByDescending(o => o.SecondDec) 
        .ThenByDescending(o => o.FirstDec); 

然後枚舉它或創建另一個集合,例如通過ToList

foreach(var obj in ordered) 
{ 
    // ... 
} 
1

使用OrderByDescending,並ThenBy

var sorted = items.OrderByDescending(item => item.Decimal2) 
    ThenBy(item => item.Decimal1); 
4

其他的答案顯示出一個偉大的方式來構建一個IEnumerable <牛逼>其中,列舉時,得到的項目在列表中的順序你描述的。它提供了列表的「視圖」,可以這麼說,並不改變列表本身的項目順序。

如果你真的想要對列表進行排序(即,改變就地使得其項目是爲了列表),你可以使用List<T>.Sort Method如下:

list.Sort((x, y) => 
{ 
    int result = decimal.Compare(y.SecondDecimal, x.SecondDecimal); 
    if (result == 0) 
     result = decimal.Compare(x.FirstDecimal, y.FirstDecimal); 
    return result; 
}); 
相關問題