On 절에 여러 조건이있는 LINQ 조인
ON 절에 여러 조건이있는 왼쪽 외부 조인을 사용하는 쿼리를 LINQ에서 구현하려고합니다.
다음 두 테이블 Project (ProjectID, ProjectName) 및 Task (TaskID, ProjectID, TaskName, Completed) 의 예제를 사용하겠습니다 . 각 작업과 함께 모든 프로젝트의 전체 목록을보고 싶지만 완료된 작업 만보고 싶습니다.
Completed == true
작업을 완료하지 않은 프로젝트를 필터링하므로 필터를 사용할 수 없습니다 . 대신 Completed == true
전체 프로젝트 목록이 표시되지만 완료된 작업 만 표시되도록 조인의 ON 절에 추가하고 싶습니다 . 완료된 작업이없는 프로젝트는 작업에 대해 null 값이있는 단일 행을 표시합니다.
다음은 쿼리의 기초입니다.
from t1 in Projects
join t2 in Tasks
on new { t1.ProjectID} equals new { t2.ProjectID } into j1
from j2 in j1.DefaultIfEmpty()
select new { t1.ProjectName, t2.TaskName }
&& t2.Completed == true
on 절에 어떻게 추가 합니까?
이 작업을 수행하는 방법에 대한 LINQ 문서를 찾을 수없는 것 같습니다.
익명 속성의 이름을 양쪽에서 동일하게 지정하면됩니다.
on new { t1.ProjectID, SecondProperty = true } equals
new { t2.ProjectID, SecondProperty = t2.Completed } into j1
@svick의 의견에 따라 다음은 더 의미가있는 또 다른 구현입니다.
from t1 in Projects
from t2 in Tasks.Where(x => t1.ProjectID == x.ProjectID && x.Completed == true)
.DefaultIfEmpty()
select new { t1.ProjectName, t2.TaskName }
여기에 다음이 포함됩니다.
from b in _dbContext.Burden
join bl in _dbContext.BurdenLookups on
new { Organization_Type = b.Organization_Type_ID, Cost_Type = b.Cost_Type_ID } equals
new { Organization_Type = bl.Organization_Type_ID, Cost_Type = bl.Cost_Type_ID }
당신은 그렇게 할 수 없습니다. join
절 (및 Join()
확장 방법)에만 결 합을 지원합니다. 그것은 또한 사용 equals
하지 않는 이유 ==
입니다. 그리고 그렇게 할 수 있다고해도 작동하지 않을 것입니다. 왜냐하면 join
외부 조인이 아니라 내부 조인 이기 때문 입니다.
참고 URL : https://stackoverflow.com/questions/7664727/linq-join-with-multiple-conditions-in-on-clause
'programing tip' 카테고리의 다른 글
iOS7 UITextView contentsize.height 대안 (0) | 2020.10.11 |
---|---|
SQLite 기본 설정 변경 (0) | 2020.10.10 |
목록 목록에 Pandas DataFrame (0) | 2020.10.10 |
함수가 여러 값을 반환하는 것이 비단뱀입니까? (0) | 2020.10.10 |
사람이 읽을 수있는 형식의 타임 스탬프 (0) | 2020.10.10 |