1. ホーム
  2. .net

[解決済み] EF LINQは、複数のネストされたエンティティを含む

2022-04-30 15:05:05

質問

OK、私は以下の階層を持つ3レベル化されたエンティティを持っています。コース -> モジュール -> チャプター

元のEF LINQ文はこちらでした。

Course course = db.Courses
                .Include(i => i.Modules.Select(s => s.Chapters))
                .Single(x => x.Id == id); 

ここで、コースに関連するLabという別のエンティティを含めたいと思います。

どのようにすればLabエンティティを含めることができますか?

以下を試しましたが、うまくいきませんでした。

Course course = db.Courses
                .Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
                .Single(x => x.Id == id); 

2つ目のEntityを含めることについて何かアイデアはありますか?

何かアドバイスや情報があれば、ぜひ教えてください。ありがとうございます。

解決方法は?

をもう一つ追加してみましたか? Include :

Course course = db.Courses
                .Include(i => i.Modules.Select(s => s.Chapters))
                .Include(i => i.Lab)
                .Single(x => x.Id == id);

あなたの解決策は、以下の理由で失敗しました。 Include はブーリアン演算子を取らない

Include(i => i.Modules.Select(s => s.Chapters) &&          i.Lab)
                           ^^^                  ^             ^ 
                          list           bool operator    other list

更新情報 詳細については、ダウンロードしてください。 LinqPad サンプルに目を通してください。 LinqとLambdaに慣れるには、これが一番手っ取り早いと思います。

手始めに SelectInclude は、セレクトで決めるということです。 を返したい(投影したい)。Includeは イージーローディング 関数で、Entity Framework に他のテーブルからのデータを含めるように指示します。

Include構文は、文字列でも可能です。このように。

           db.Courses
            .Include("Module.Chapter")
            .Include("Lab")
            .Single(x => x.Id == id);

のサンプルは LinqPad は、このことをよりよく説明しています。