집 >데이터 베이스 >MySQL 튜토리얼 >LINQ to SQL에서 여러 조건을 사용하여 왼쪽 외부 조인을 수행하는 방법은 무엇입니까?
LINQ to SQL: 여러 기준을 사용하여 왼쪽 외부 조인 마스터하기
SQL 쿼리를 LINQ to SQL로 변환하는 작업은 까다로울 수 있으며, 특히 복잡한 조인의 경우 더욱 그렇습니다. 이 문서에서는 여러 조건을 사용하여 왼쪽 외부 조인을 수행하는 일반적인 시나리오에 중점을 둡니다.
SQL 과제:
시작점은 '마침표' 테이블과 '사실' 테이블 사이에 왼쪽 외부 조인을 사용하는 SQL 쿼리입니다. 조인은 'p.id = f.periodid' 및 'f.otherid = 17'이라는 두 가지 조건을 사용합니다. 두 번째 조건은 필터 역할을 합니다.
LINQ 장애물:
LINQ의 DefaultIfEmpty()
방법은 왼쪽 외부 조인에 대한 일반적인 접근 방식입니다. 그러나 단순히 조인 where
뒤 절에 'f.otherid = 17'을 추가하면 예상대로 작동하지 않습니다.
효과적인 LINQ 솔루션:
핵심은 을 사용하기 전에DefaultIfEmpty()
두 번째 조인 조건을 적용하는 것입니다. 다음은 두 가지 효율적인 방법입니다.
방법 1: 확장 메서드 구문 사용:
<code class="language-csharp">from p in context.Periods join f in context.Facts on p.id equals f.periodid into fg from fgi in fg.Where(f => f.otherid == 17).DefaultIfEmpty() where p.companyid == 100 select fgi.value</code>
방법 2: 하위 쿼리 사용:
<code class="language-csharp">from p in context.Periods join f in context.Facts on p.id equals f.periodid into fg from fgi in (from f in fg where f.otherid == 17 select f).DefaultIfEmpty() where p.companyid == 100 select fgi.value</code>
이것이 효과적인 이유:
결정적인 차이점은 조건의 배치에 있습니다. where
절 after DefaultIfEmpty()
에 'f.otherid == 17'을 넣으면 'f'가 null인 행이 필터링됩니다(조인이 일치하는 항목을 찾지 못했기 때문입니다). Where()
절 before DefaultIfEmpty()
내에 배치하여 null 값이 도입되기 before를 필터링하여 올바른 왼쪽 외부 조인 동작을 보장합니다. 첫 번째 방법에서 null을 올바르게 처리하려면 fgi.value
대신 f.value
을 선택합니다.
위 내용은 LINQ to SQL에서 여러 조건을 사용하여 왼쪽 외부 조인을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!