1

私は国を含むデータ構造を持っています。各国には複数のトーナメントを含めることができ、各トーナメントには複数の試合を含めることができ、各試合には2つのチーム(ホームチームとアウェイチーム)があります。データは、主キーと外部キーを使用して通常の階層でセットアップされます。特定の日に行われたすべての試合について、すべての子データがその下に熱心にロードされている国のリストを取得したいと思います。systaxはすべて間違っていますが、これは私が必要としていたようなものでした。誰かが私を正しい方向に向けることができますか?ありがとうございました。

            var countries = Context.sbsCountries
            .Include(c => c.Tournaments
               .Select(t => t.Matches)
                   .Select(m => m.TeamHome)
                   .Select(m => m.TeamAway)
                        )
                    )
            .Where(m => m.date == providedDate)
4

1 に答える 1

1

(編集)

これを行う方法は、最初に必要な一致をロードし、指定されたデータを含めてから、国をフェッチすることです。

var matches = from m in context.Matches
                       .Include(m => m.Tournament)
                       .Include(m => m.TeamHome)
                       .Include(m => m.TeamAway)
              where m.Date == providedDate
              select m;
matches.Load();
var countries = context.sbsCountries.ToList();

エンティティフレームワークは適切な関連付けを自動的に修正するため、各国はMatches指定された日付に独自の関連付けを持っています。

これを機能させるには、遅延読み込みをオフにする必要があります。そうしないと、郡のMatchesコレクションをアドレス指定するときに、その時点で完全に読み込まれます(コンテキストがまだ有効な場合)。

もう1つの方法は、一致するクエリを開始し(遅延読み込みを無効にして)、:を使用して個別の国を選択することTournamentsです。

var matches = (from m in context.Matches
                        .Include(m => m.Tournament)
                        .Include(m => m.TeamHome)
                        .Include(m => m.TeamAway)
               where m.Date == providedDate
               select m.Tournament.Country).Distinct();
于 2013-01-27T13:03:25.220 に答える