我有我的自定義對象的列表。該對象包含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個字符串和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
我道歉,如果這已經回答了 - 請點我那個帖子我找不到它
list.OrderByDescending(o => o.Field2)
.ThenByDescending(o => o.Field1);
var ordered = objects.OrderByDescending(o => o.SecondDec)
.ThenByDescending(o => o.FirstDec);
然後枚舉它或創建另一個集合,例如通過ToList
。
foreach(var obj in ordered)
{
// ...
}
使用OrderByDescending
,並ThenBy
:
var sorted = items.OrderByDescending(item => item.Decimal2)
ThenBy(item => item.Decimal1);
其他的答案顯示出一個偉大的方式來構建一個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;
});
你應該包括'屬性你的'對象'的名字,那會更好。否則,我想答案者會「假設你有......」或者甚至不假設任何東西。 –
這已經回答了[這裏](http://stackoverflow.com/questions/298725/multiple-order-by-in-linq)和[這裏](http://stackoverflow.com/questions/289010/c-尖銳一覽排序由-X-然後-Y?RQ = 1)。 –