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()

ロースターに多くのチームがあり、チームに多くのリーグがある場合は、.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);
于 2013-01-25T15:28:48.007 に答える