C# используйте GroupBy в OrderBy - PullRequest
1 голос
/ 02 мая 2020

У меня есть такая коллекция:

private ObservableCollection<Playlist> AllArtists;

И Playlist имеет поле ObservableCollection<Music> Songs, а Music имеет свойство string с именем Album.

I хочу отсортировать AllArtists в порядке убывания по количеству отдельных альбомов.

Как мне это сделать?

Это моя неудачная попытка:

AllArtists.OrderByDescending(playlist => playlist.Songs.GroupBy(music => music.Album).Count);

1 Ответ

1 голос
/ 02 мая 2020

Вот как вы можете решить свою проблему:

IEnumerable<Playlist> playlistsOrderedByAlbumCount =
    AllArtists
        .Select(p =>
            new
            {
                playlist = p,
                // Here we count number of unique albums in the current playlist.
                count = p.Songs.Select(s => s.Album).Distinct().Count()
            })
        // And then order playlists in descending order by number of unique albums.
        .OrderByDescending(p => p.count)
        .Select(p => p.playlist);

AllArtists = new ObservableCollection<Playlist>(playlistsOrderedByAlbumCount);

Вот полный образец , демонстрирующий это решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...