2012-11-20 2 views
0

이 SQL 쿼리를 Linq 쿼리로 변환하는 방법?Linq 왼쪽 외부 조인 쿼리

select * 
from setupUOMs as su 
LEFT OUTER JOIN scmSKUUoMs as ssu 
    on su.UoMID != ssu.UoMID 
where ssu.SKUID = 446 and su.UMTypeID = 5 

다음은 linq 쿼리입니다. 위의 질의에서

from c in setupUOMs 
     join o in scmSKUUoMs 
      on c.UOMID equals o.UoMID into sr 
     from x in sr.DefaultIfEmpty() 
     where x.SKUID == 446 
     select x 

지금까지에만 가입 수를 추출하기 위해 수행하지만 내가 원하는 것은 왼쪽 테이블의 비 동일한 레코드를 선택하는 것입니다하지만 난에 합류 기록을 보여줄 수 있어요했습니다. 내 결과가 두 열을 기반으로하는 동안 왼쪽 테이블 만의 레코드를 반환합니다. Where 절에서 왼쪽 테이블의 x.SKUID에 접근 할 수는 있지만 양식 오른쪽 테이블 인 x.UMTypesID에 액세스 할 수 없습니다 (조건을 만들 수있는 오른쪽 테이블의 열이 반환되지 않음을 의미).

+0

당신은 무엇을하려고 했습니까? –

+0

'where'에서'ssu.SKUID = 446'을 검사 했으므로 대신 내부 조인을 사용할 수 있습니다. – Magnus

+0

나는 scmSKUUoMs에 테이블 setupUOMs의 왼쪽 외부 조인을했고 setupUoMs의 일치하지 않는 레코드를 반환했습니다 .. 당신이 Arnold를 이해하기를 희망합니다 .. –

답변

0

동일하지 않은 조건의 조인은 조인이 아니라 내부 조인 된 레코드를 제외한 카디 전 곱입니다. 쿼리를 작성하는 데는 타당한 이유가있을 수 있지만 레코드 수 측면에서 결과 집합이 항상 파열 될 위험이 있습니다.

은 그럼 조건이 의미가 결과를 확인 가정하자, 당신은 할 수 있습니다 :

from su in setupUOMs 
from ssu in scmSKUUoMs // from .. from is a Cartesian product 
where su.UOMID != ssu.UoMID 
       && ssu.SKUID == 446 
       && su.UMTypeID == 5 
select new { su.Prop1, ssu.Prop2, ... }