2009-05-18 5 views
0

TableB에서 관련 요소가없는 TableA의 요소를 검색 할 때 이점이 있습니까? 나는 왼쪽 외부로 이렇게 사용 해요GroupJoin 대 null 관련 항목을 필터링하는 위치

TableA 
    .GroupJoin(
     TableB, 
     o => o.TableAID, 
     i => i.TableAID, 
     (o,i) => new {o, child = i.DefaultIfEmpty()}) 
    .Where(x => x.child.Where(c => c != null).Count() == 0) 
    .Select(x => x.o); 

또는

TableA 
    .Where(a => !TableB.Select(b => b.TableAID).Contains(a.TableAID)); 

는 용도되는 첫 번째 예 종류, SQL에 가입 할 수 있습니다. 두 번째 예제는 "NOT IN"유형의 접근 방식을 사용합니다.이 방식은 이전에 사용한 적이 없습니다.

두 방법 모두 동일한 데이터를 반환합니다. 두 번째는 단순성 관점에서 선호하는 것입니다. 첫 번째 장점은 있습니까?

다른 방법이 있습니까?

답변

0

SQL Server의 쿼리 최적화 프로그램은 WHERE IN과 같이 LEFT JOIN WHERE b is NULL과 같은 작업을 수행합니다. 예상 실행 계획을 확인하여이를 확인하십시오.

관련 문제