2012-09-25 6 views
1

두 개 이상의 필드를 통해 두 테이블을 조인 할 때 Linq에서 내부 조인을 작성하는 방법을 알고 싶습니다.LINQ 점 표기법과 하나 이상의 조인 필드를 사용하여 조인

SELECT tableOne.fieldThree 

FROM table_One AS tableOne, 
    table_Two AS tableTwo, 
WHERE 
    tableOne.fieldOne == tableTwo.fieldOne AND 
    tableOne.fieldTwo == tableTwo.fieldTwo; 

나는이 시도 :

예를 들어 말하자면이는 SQL과 동일

tableTwo.Join(tableOne, 
       two => new { two.fieldOne, two.fieldTwo }, 
       one => new { one.fieldOne, one.fieldTwo }, 
       (two, one) => one.fieldThree) 
     .ToList(); 

그러나 컴파일러는 방법은 사용에서 추론 할 수 없다고 오류가 표시됩니다.

감사합니다.

+3

샘플 코드에 가짜 닫는 중괄호가 있습니다. 시도한 정확한 * 코드와 문제를 알려주십시오. 오, 나는 마지막 논쟁에서'tableOne.fieldThree'보다는'one.fieldThree'를 뜻한다고 생각합니다. 짧지 만 완성 된 * 예제 (데이터 모델 포함)를 사용하면 훨씬 쉽게 도움을받을 수 있습니다. –

+0

http://stackoverflow.com/questions/373541/how-to-do-joins-in-linq-on-multiple-fields-in-single-join –

+0

@JonSkeet : corrected에서 확인하십시오. – Heathcliff

답변

1

당신의 접근 방식이 좋으며 효과가 있습니다. 컴파일러 오류 만 수정하면됩니다. 아마도 쿼리의 두 익명 형식이 같은 형식이 아닙니다. 필드의 순서가 변경되거나 유형이 정확히 일치하지 않으면 쉽게 발생합니다.

그러나 이것은 C# 문제입니다. 당신이 지나면 ORM이 이것을 지원할 것입니다.

+0

둘 다 같은 유형입니다. – Heathcliff

+0

나는 너 자신을 바로 잡는다 : 너는 옳았다. 그들은 다른 유형이었다. 해결 됐어요. 고마워요. – Heathcliff

0

내가 볼 수있는 가장 쉬운 방법은 'Union'방법을 사용하는 것입니다. 두 테이블의 데이터를 하나 이상의 필드로 추출한 다음 Union을 사용하십시오. 이것은 중복없이 두 테이블을 조인합니다.

+0

C# 컴파일러에서 오는 형식 오류를 해결하지 못합니다. – usr