なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

EntityFramework で子の子を読み込みたい

リレーションが下のような感じの場合。

public class Anime
{
    public int AnimeId { get; set; }
    public int Year { get; set; }
    public int Quarter { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Episode> Episodes { get; set; }
}

public class Episode
{
    public int EpisodeId { get; set; }
    public int Sequense { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Cast> Casts { get; set; }
}

public class Cast
{
    public int CastId { get; set; }
    public string Name { get; set; }
}

今期放送している Anime から Cast を取得したい場合、以下のようにすればできます。

var anime = context.Anime.AsNoTracking()
                   .Where(w => w.Year == 2016)
                   .Where(w => w.Quarter == 3)
                   .Include(w => w.Episodes.Select(v => v.Cast))
                   .ToList();

foreach (var cast in anime.Episode.Cast)
{
    Console.WriteLine(cast.Name);
}