2017-12-28 43 views
0

간단한 엔트리가 있는데, 상위 엔티티를 기반으로 2 차 하위 엔티티를 가져 오려고합니다.EF 코어 : 2 단계 아래로 만 관련 날짜를 반환하십시오.

public class Country { 
    public string Name {get;set;} 
    public List<State> States {get;set;} 
} 

public class State { 
public string Name {get;set;} 
public Country Country {get;set;} 
public List<City> Cities {get;set;} 
} 

public class City { 
public string Name {get;set;} 
public State State {get;set;} 
} 

어떻게 Country.Name와 부모 == "일본"이 (본질적으로 다른 모든 정보를 무시) 만 도시를 검색 할 수 있습니까?

나는 ThenInclude 알고 :

dbContext.Countries 
.Include(o => o.States} 
.ThenInclude(x => x.Cities) 
.Where(o => o.Name.Equals("Japan")) 
.ToList(); 

그런 다음 내가 각 도시의 목록을 extact와 (내가 생각하지 않는 우아한 방법입니다)에만 목록이 포함 된 새로운리스트에 결합해야합니다.

+0

이 사용 사례의 경우 도시 수가 상당히 유한합니다. 나는 이것을 어쨌든 두 개의 테이블로 평평하게 할 것이다. Countries 테이블은 195 개의 레코드로 구성됩니다. 100,000 명이 넘는 주민들 (일반적으로 사용하기에 꽤 괜찮음)이있는 도시에 머물렀다면 SQL이 매우 쉽게 처리 할 수있는이 테이블에 대해 최대 5000 개의 레코드가됩니다. –

답변

0

이 작업을 수행하는 가장 간단한 방법은 반대로 살펴 보는 것입니다.

await dbContext.Cities 
     .Where(o => o.State.Country.Name.Equals("Japan")) 
     .ToListAsync(); 

이렇게하면 그랜드 부모가 이름이 일본 인 도시 목록 만 반환됩니다.

+0

올바른 생각일지도 모르지만 코드가 올바르지 않습니다. 컴파일되지 않습니다. –

+0

@GertArnold 예를 들어 답을 prettifying 때 우연히 삭제되었습니다. 이게 내가 가진 작품이야. – Aeseir

+0

처음에 질문을 업데이트하고 싶습니다. City 개체에서 주 및 국가를 거의 횡단 할 수 없습니다. – cloudikka