Подтвердить что ты не робот

Как я могу отсортировать список <T> несколькими T.attributes?

Скажем, у меня есть список песен.

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

Теперь я хочу сначала отсортировать их с помощью PlayOrder, начиная с нуля и второго по имени в алфавитном порядке.

Таким образом, примерный набор отсортированных результатов будет (Name, PlayOrder):

/*
    Pachelbel Canon, 0
    A Happy Song, 4
    Beethoven 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;

Как я могу сортировать по имени, как показано выше?

4b9b3361

Ответ 1

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

Ответ 2

Если вы хотите продолжить использование метода сортировки, вам нужно будет сделать вашу функцию сравнения умнее:

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

Если вы хотите использовать LINQ, вы можете пойти с тем, что опубликовал K Ivanov.