簡體   English   中英

GrandChildren上的實體框架過濾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM