2016-08-25 3 views
2

동적 인 Linq에서 왼쪽 외부 조인 할 싶지만 구문을 올바르게 얻을 수 없습니다. SQL에서 그 결과는 다음과 같습니다 동적 LINQ에서동적 인 Linq 여러 속성 왼쪽 된 외부 조인

SELECT col1, col2, col3 from tableA as a 
LEFT OUTER JOIN tableB as b on a.col1 = b.col1 AND a.col2 = b.col2 AND a.col3 = 1 

내가이 시도 :

dbContext.tableA 
.GroupJoin(tableB, col1 == tableA.col1 && col2 == tableA.col2 && col3 == 1) 
.Select('new(col1, col2, col3)'); 

세 번째 가입 매개 변수 (열)를 하드 코딩, 그것은 TableB의에서 오지 않기 때문에. 올바른 linq 코드는 무엇입니까?

편집 : 중복 질문이 아닙니다. 일반 LINQ가 아닌 동적 LINQ 구문을 찾고 있습니다.

+0

여기에있는 문제는 무엇입니까? 필요한 구문 만입니까? [문서] (https://msdn.microsoft.com/en-us/library/bb534297%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396) – slawekwin

+0

[LEFT OUTER JOIN LINQ] (http://stackoverflow.com/questions/3404975/left-outer-join-in-linq) – uTeisT

+1

@Oktay - 동적 linq 문서에서'GroupJoin' 과부하가없는 것 같습니다 –

답변

0

일반적으로 조인과 특히 왼쪽 조인의 경우 문 구문을 사용합니다.

테스트하지만,이 같은 것을 보일 것이다되지 않음 :

var result = from a in tableA 
      from b in tableB.Where(x => x.col1 == a.col1 && x.col2 == a.col2 && a.col3 == 1).DefaultIfEmpty() 
      select new { a.col1, a.col2, b.col3 }; 

(가) TableB의에서 조인에 .DefaultIfEmpty()를 수행함으로써, 조인 왼쪽으로 이것을 처리합니다. .DefaultIfEmpty()를 생략하면 내부 조인처럼 동작합니다.

+0

고마워! select()에서 전달하는 문자열이 동적이며 매개 변수로 함수에 포함되어 있기 때문에 명령문 구문을 사용할 수 없습니다. –

+0

익명 형식을 반환 할 필요가 없으며 새 MyObject {First = col1, 등}을 선택하거나 을 시도 할 수 있습니다. 그러나이 함수가 데이터 어댑터 인 경우 함수를 선택하려고 할 수 있습니다. .Invoke() –

+0

여기에 좋은 예가 있습니다. 왼쪽 결합으로 .SelectMany. http://stackoverflow.com/questions/584820/how-do-you-perform-a-left-outer-join-using-linq-extension-methods –