2

List<IGrouping<string, IGrouping<string, T>>>Linq 式を取得できるかどうかを知りたいです。私がやりたいのは、ジャンルとアーティスト別に曲を並べることですが、各ジャンルとすべてのジャンルを反復できる形式で、アルバムごとに反復します. 可能な場合、どのように行うことができますか?または、私が達成したいことへのより良いアプローチはありますか?

これが私の歌のクラスです

public class Song
{
    [StringLength(100)]
    public string Album { get; set; }

    public int Id { get; set; }

    [StringLength(100)]
    public string Title { get; set; }

    [StringLength(100)]
    public string Genre { get; set; }

    [StringLength(255)]
    public string Comment { get; set; }

    [StringLength(4)]
    public string Year { get; set; }

    [StringLength(100)]
    public string Author { get; set; }

    public int Length { get; set; }

    [StringLength(255)]
    public string Photo { get; set; }

    [StringLength(255)]
    public string FileName { get; set; }

    public string Extension { get; set; }
}

そして、私がここに持っていたこのクエリ

var songs = db.Songs.GroupBy(s => s.Genre).ToList();

が表示されますList<IGrouping<string, Song>>が、私が望むのは、アーティストごとにさらにグループ化することです。

4

3 に答える 3

5

私が欲しかったのは でList<IGrouping<string, IGrouping<string, Song>>>、このコードは私が望むものを正確に与えてくれます

            var queryNestedGroups =
            (from song in db.Songs
            group song by song.Genre into newGroup1
            from newGroup2 in
                (from song in newGroup1
                 group song by song.Author)
            group newGroup2 by newGroup1.Key).ToList();

(ただし、それをlinqメソッド構文に変換する方法はよくわかりません)。

コメントおよび/または回答してくれたすべての人に感謝します。

于 2016-01-12T16:46:20.160 に答える
0

最初のグループ化の結果に 2 つ目のグループ化を追加してみてください

var songs = db.Songs.GroupBy(s => s.Artist).SelectMany(s => s.GroupBy (d =>  d.Genre)).OrderBy (s => s.Key).ToList();
于 2016-01-12T16:40:32.553 に答える