0

对实体框架来说还是很新的。如果这是一个菜鸟问题,请原谅我。希望有人可以对此有所了解。

我正在尝试从 3 个相关表中选择数据。

Leagues -> Teams -> Rosters -> 

关系是League.LeagueID => Team.LeagueID => Roster.TeamID

在名册表中有一个PlayerID

我需要一个可以选择名册拥有的所有联赛的查询PlayerID = 1

无论我尝试什么,我似乎都无法过滤孙子记录上的结果。在互联网上也找不到太多。

我找到了一种使用匿名类型的方法,但它们是只读的,因此我可以更改数据。我必须能够在数据返回后更新数据。

4

2 回答 2

2
db.Leagues.Where(l => l.Teams.Any(t => t.Roster.PlayerID == 1));

生成的 SQL 应该可以得到你想要的,即使它看起来不可读;)

如果您想专门使用内部连接来执行此操作,可以使用如下代码执行此操作:

from l in db.Leagues
join t in db.Teams on l.LeagueID equals t.LeagueID
join r in db.Rosters on t.TeamID equals r.TeamID
where r.PlayerID = 1
select l

更新

要处理急切加载子关联,请使用Include()

((from l in db.Leagues
join t in db.Teams on l.LeagueID equals t.LeagueID
join r in db.Rosters on t.TeamID equals r.TeamID
where r.PlayerID = 1
select l) as ObjectQuery<League>).Include(l => l.Teams.Select(t => t.Rosters))
于 2013-01-25T14:43:10.887 回答
0
db.Roasters.Where(r=>r.PlayerId ==1).Select(r=>r.Team).Select(t=>t.League).Distinct()

如果 Roaster 有很多球队并且球队有很多联赛,你可以使用.SelectMany而不是.Select

.SelectMany来自MSDN的示例:

PetOwner[] petOwners = 
                    { new PetOwner { Name="Higa, Sidney", 
                          Pets = new List<string>{ "Scruffy", "Sam" } },
                      new PetOwner { Name="Ashkenazi, Ronen", 
                          Pets = new List<string>{ "Walker", "Sugar" } },
                      new PetOwner { Name="Price, Vernette", 
                          Pets = new List<string>{ "Scratches", "Diesel" } } };

                // Query using SelectMany().
                IEnumerable<string> query1 = petOwners.SelectMany(petOwner => petOwner.Pets);
于 2013-01-25T15:28:48.007 回答