2013-06-25 1 views
0
SELECT  PART_TYPE.PART_TYPE_ID, 
      PART_TYPE.PART_TYPE_NAME,      
      PART_AVAILABILITY.DATE_REF, 
      PART_TYPE.VEHICLE_ID, 
      PART_AVAILABILITY.AVAIL_COUNT 

FROM PART_AVAILABILITY 
RIGHT JOIN PART_TYPE 
ON PART_AVAILABILITY.PART_TYPE_ID = PART_TYPE.PART_TYPE_ID 
AND PART_AVAILABILITY.VEHICLE_ID = PART_TYPE.VEHICLE_ID 
where PART_TYPE.VEHICLE_ID = 366 

PART_TYPE_IDVEHICLE_IDPART_TYPE 테이블에 Primary Key입니다 오류에 가입하세요. VEHICLE_IDVEHICLE 표의 Foreign Key입니다.C#을 LINQ는

DATE_REF, PART_TYPE_IDVEHICLE_IDPART_AVAILABILITY 테이블에 Primary Key입니다. VEHICLE_IDPART_TYPE_ID은 에서 PART_TYPE 테이블입니다.

위의 쿼리는 아래 출력을 제공합니다.

PART_TYPE_ID PART_TYPE_NAME DATE_REF     VEHICLE_ID AVAIL_COUNT 
5    A1    2013-06-20 00:00:00.000 366   1 
6    B1    2013-06-20 00:00:00.000 366   2 
7    C1    2013-06-20 00:00:00.000 366   1 
8    D1    NULL      366   NULL 
9    E1    NULL      366   NULL 
16    F1    2013-06-20 00:00:00.000 366   1 

이 내 linq 위의 쿼리에 대한 쿼리입니다.

var vehiclePartType = from pa in context.PART_AVAILABILITY 
        join pt in context.PART_TYPE 
        on pa.PART_TYPE_ID equals pt.PART_TYPE_ID into joined 
        from j in joined.DefaultIfEmpty() 
        where j.VEHICLE_ID == 366 
        select new 
        { 
         PART_TYPE = j, 
         PART_AVAILABILITY = pa 
        }; 

그러나 linq 쿼리는 아래 출력을 제공했습니다.

PART_TYPE_ID PART_TYPE_NAME DATE_REF     VEHICLE_ID AVAIL_COUNT 
5    A1    2013-06-20 00:00:00.000 366   1 
6    B1    2013-06-20 00:00:00.000 366   2 
7    C1    2013-06-20 00:00:00.000 366   1 
16    F1    2013-06-20 00:00:00.000 366   1 

NULL 레코드가 누락되었습니다.

어떻게 해결할 수 있습니까? 내가 LINQ와하지만 SQL 쿼리에 너무 익숙하게하지 오전

답변

3

이 될 것입니다 문을 가입 그래서 올바른 반전에 의해 수행됩니다

var vehiclePartType = from pt in context.PART_TYPE 
         join pa in context.PART_AVAILABILITY on pt.PART_TYPE_ID equals pa.PART_TYPE_ID into joined 
         from j in joined.DefaultIfEmpty() 
         where pt.VEHICLE_ID == 366 
         select new 
         { 
          PART_TYPE = pt, 
          PART_AVAILABILITY = j 
         }; 
+0

'선택'의'PART_AVAILABILITY = pa'에서 '이름'이 (가) '현재 컨텍스트에 존재하지 않습니다'오류가 발생했습니다. – Bishan

+0

수정했습니다. 다시 시도하십시오 :) – gzaxx

+0

아니요. 나는 이것을 전에 시도했다. 이것은 또한 내 질문에 반환 출력입니다. 'NULL' 레코드가 없습니다. – Bishan

0

당신이 당신의 LINQ 쿼리에없는

AND PART_AVAILABILITY.VEHICLE_ID = PART_TYPE.VEHICLE_ID

있습니다. 오른쪽 LINQ에 가입

+0

SQL 쿼리는 해당 부분이없는 데이터를 반환합니다. 그래서 그것은 문제가되지 않습니다. – Bishan

1

나는 당신은 당신의 테이블을 교체해야합니다 생각합니다. 실제로 당신이하고있는 일은 남을 것입니다. 오른쪽으로 변환하려면 테이블을 바꾸기 ::

{ 
         var vehiclePartType = from 
         pt in context.PART_TYPE join pa in context.PART_AVAILABILITY 
         on pt.PART_TYPE_ID equals pa.PART_TYPE_ID into joined 
         from j in joined.DefaultIfEmpty() 
         where j.VEHICLE_ID == 366 
         select new 
         { 
          PART_TYPE = j, 
          PART_AVAILABILITY = pa 
         }; 
    } 
+0

'선택'의 'PART_AVAILABILITY = pa'에서 '이름'이 (가) 현재 컨텍스트에 존재하지 않습니다 '오류가 발생했습니다. – Bishan