2014-08-28 2 views
0

가 문을 가입하고 영광스러운 일에서 실행 사용하여 쿼리를 generat라는 것, 내가엔티티 프레임 워크의 동적은

using(var ctx = new MyFooContext()) 
{ 
    var joins = ctx.foo.Include(x => x.A).Include(x => x.B).ToList(); 
    var includes = new List<Expression<Func<foo, object>>> {x => x.A, x => x.B); 
    var noJoinQuey = ctx.foo.AsQueryable(); 
    includes.Each(i => noJoinrQuery.Include(i)); 
    var noJoins = noJoinQuery.ToList(); 
} 

첫 번째, joins을 실행하면 나는 간단한 클래스

public class foo 
{ 
    public List<int> A {get;set;} 
    public List<int> B {get; set;} 
} 

있다고 가정 포함 성명서. 두 번째 것은 noJoins이며, 개별 선택 명령문 전체를 실행합니다. 왜?!

+0

그게 맞습니까? 각 .ForEach가되어야합니까? – drneel

+0

아무런 차이가 없습니다. Each, ForEach 또는 적절한 foreach 루프를 사용하면 여전히 조인을 만들지 않습니다. –

+0

.Include()는 관련 엔티티를 열심히로드하므로 조인을로드합니다. 그 포함에 대한 반복 그 표현을 평가하고 따라서 여러 가지 선택 쿼리를 일으키는 것 같아요. – drneel

답변

0

그래서 .Include은 객체를 반환하는 함수 중 하나이므로 query.Include().Include()처럼 연결할 수는 있지만 루프에서는 그렇게하지 않는 것 같습니다. 변경하면

foreach(var p in includes) 
{ 
    query = query.Include(p); 
} 

으로 변경됩니다.

관련 문제