还是很新的实体框架。 所以请原谅我,如果这是一个小白的问题。 希望有人能在此提供一些线索。
我想从3个相关的表中的数据。
Leagues -> Teams -> Rosters ->
的关系是League.LeagueID => Team.LeagueID => Roster.TeamID
名册中的桌子上有一个PlayerID
列
我需要一个查询,可以选择所有的联赛,其中名册PlayerID = 1
我似乎不能不管我怎么努力筛选的孙子创纪录的业绩。 没有找到太多的在互联网上无论是。
我已经找到一种方法与匿名类型要做到这一点,但那些是只读的,所以我可以修改数据。 我必须能够返回后更新数据。
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
UPDATE
要做到与预先加载的子关联使用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))
db.Roasters.Where(r=>r.PlayerId ==1).Select(r=>r.Team).Select(t=>t.League).Distinct()
如果焙烧炉有许多团队和团队有很多的联赛,你可以使用.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);