2013-07-28 4 views
1

1 : N 관계에있는 데이터베이스에 두 개의 테이블이 있고 열심히로드하는 왼쪽 조인 쿼리를하고 싶습니다.하위 엔티티를 필터링하는 방법을 알고 열망하는로드를 모두 가져 오는 방법은 무엇입니까?

내 테이블은 다음과 같습니다

  • 비디오 (사용 가능한 IDVersion, IDVideo, 이름, ...) (IDVIdeo, 이름 ...)
  • 버전

음, 비디오 나는 여러 가지 버전 (DVD, Blu-Ray ... 등)을 가질 수 있으며 버전은 비디오에만 속할 수 있습니다.

나는 적어도 하나의 사용 가능한 버전 (아마도 일부 버전은 한 명의 친구를 소유하고 있습니다)이있는 모든 비디오를 얻고 싶습니다.

적어도 사용 가능한 버전이있는 모든 비디오를 가져오고 싶습니다. 그러나이 비디오 중에서 모든 버전을 사용할 수 있고 사용할 수 없게하고 싶습니다.

첫 번째 단계는 적어도 사용 가능한 버전이있는 모든 비디오를 알고 두 번째 단계는 모든 비디오와 모든 버전 (사용 가능 및 사용 불가)을 얻는 것입니다.

원시 SQL을 사용하고 싶습니다. 그러나 원시 SQL을 사용하여 열심히로드하는 것을 사용하는 것이 불가능합니다. linq을 사용하고 싶습니다.

비디오 엔티티의 컬렉션 버전을 해당 버전으로 채우고 싶기 때문에 열을 사용하여 데이터베이스에 하나의 쿼리 만 사용하려고합니다.

감사합니다.

답변

1

LINQ를 사용하는이 솔루션은 오히려 솔직하고 다음과 같습니다

var sql = context.Videos 
    .Include(v => v.Versions) 
    .Where(v => v.Versions.Any(vers => vers.Available)) 
    .ToString(); 

: 당신이 정말이 원시 SQL을 원하는 경우이 LINQ 쿼리에서 SQL을 추출 할 수 있습니다

var videos = context.Videos 
    .Include(v => v.Versions) 
    .Where(v => v.Versions.Any(vers => vers.Available)) 
    .ToList(); 

편집

원시 sql을 사용하는 쿼리는 탐색 속성을 채우지 않을 가능성이 높으므로 EA 용으로 사용할 수없는 것 같습니다. 게르로드. 답과 그 주석에서 토론 here을 참조하십시오.