[英]Entity Framework Filtering On GrandChildren
對實體框架來說還是一個新手。 如果這是一個菜鳥問題,請原諒我。 希望有人可以對此有所了解。
我試圖從3個相關表中選擇數據。
Leagues -> Teams -> Rosters ->
關系是League.LeagueID => Team.LeagueID => Roster.TeamID
在Roster表中有一個PlayerID
列
我需要一個查詢,可以選擇Roster擁有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
要使用eager加載子關聯,請使用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()
如果Roaster有很多團隊,團隊有很多聯賽你可以使用.SelectMany
而不是.Select
從MSDN中選擇.SelectMany
示例:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.