2011-02-02 23 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; 
}); 

相关问题