1

私は.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)
                     );

これで私を助けてください、どうもありがとう!

4

1 に答える 1

0

私はこのクエリを試してみます:

var res = Context.C.Where(c => c.Bs.Any(b => b.As.Any(a => a.Id == theA.Id)));
于 2012-08-31T11:52:24.483 に答える