1

我有一个包含国家/地区的数据结构,每个国家/地区可以包含多个锦标赛,每个锦标赛可以包含多场比赛,每场比赛有 2 支球队(主队和客队)。数据设置在具有主键和外键的正常层次结构中。我想获得一个国家列表,其中所有子数据都急切地加载到它们下面,用于在特定日期进行的所有比赛。这是我需要的东西,尽管系统税全错了。谁能指出我正确的方向?谢谢你。

            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 集合时,它将在那个时刻完全加载(如果上下文仍然存在)。

另一种方法是开始查询匹配项(同样禁用延迟加载)并通过以下方式选择不同的国家/地区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 回答