2011-02-02 81 views
18

比方說,我有一個歌曲列表。如何使用多個T.attributes對列表<T>進行排序?

Song { 
    public string Name = ""; 
    public int PlayOrder = 0; 
    } 

現在我想首先按PlayOrder從0開始排序,然後按名稱按字母順序排序。

所以設定結果的排列的例子是(姓名,PlayOrder):

/* 
    Pachelbel's Canon, 0 
    A Happy Song, 4 
    Beethoven's 5th, 4 
    Some Other Song, 7 
*/ 

見PlayOrder = 4成的人是如何以字母順序?這就是我要去的。

現在我有它只是一個字段排序:

List<Song> final = new List<Song>(); 

... 

final.Sort((x, y) => x.PlayOrder.CompareTo(y.PlayOrder)); 

return final; 

如何我也按名稱排序如上所示?

回答

35
return final.OrderBy(s => s.PlayOrder).ThenBy(s => s.Name); 
+0

請注意,這將返回一個新的「IEnumerable 」序列,而不是原地排列原始列表。 – LukeH 2011-02-02 14:46:38

+0

如果我想讓它返回一個列表,我可以在那裏添加一個.ToList()。 – BigOmega 2011-02-02 14:51:52

21

如果你想繼續使用該排序方法,你需要讓你的比較功能更聰明:如果你想使用LINQ,那麼你可以用什麼ķ伊萬諾夫貼去

final.Sort((x, y) => { 
    var ret = x.PlayOrder.CompareTo(y.PlayOrder); 
    if (ret == 0) ret = x.Name.CompareTo(y.Name); 
    return ret; 
}); 

相關問題