私は.net4.0でEF5.0を使用しており、次のような多対多の関係を持つ3つのエンティティがあります:
public class A
{
public int Id { get; set; }
public ICollection<B> Bs { get; set; }
}
public class B
{
public int Id { get; set; }
public ICollection<A> As { get; set; }
public ICollection<C> Cs { get; set; }
}
public class C
{
public int Id { get; set; }
public ICollection<B> Bs { get; set; }
}
これは私のマッピングコードです:
HasMany(a => a.Bs).WithMany(b => b.As).Map(m =>
{
m.ToTable("A_B");
});
HasMany(c => c.Bs).WithMany(b => b.Cs).Map(m =>
{
m.ToTable("B_C");
});
A の特定のインスタンスについて、B によって間接的に関連するすべての C を取得するにはどうすればよいでしょうか?
次のようなきれいなSQLクエリを取得したい:
select C.* from C
join B_C on B_C.Cid = C.id
join A_B on A_B.Bid = B_C.Bid
join A on A.id = A_B.Aid
where A.id = 1
ジャンクションテーブルにエンティティタイプを指定せずにそのSQLを取得できましたか? 以下の私のコードは、ネストされたクエリでかなり醜いSQLを取得しました:
var res = Context.C.Where(
c => c.Bs.SelectMany(b => b.As.Select(a => a.Id))
.Contains(theA.Id)
);
これで私を助けてください、どうもありがとう!