2012-10-21 3 views
0

나는 다음과 같은 한 테이블여러 엔티티 프레임 워크에 쿼리를 결합

작업
ID | 이름 | proj_id
1 | task1 | 1
2 | task2 | 1
3 | task3 | 1

프로젝트
id | 이름
1 | 샘플 proj1
2 | 데모 프로젝트

budget_versions
id | version_name | proj_id
1 | 50 | 1

예산
id | 비용 | budget_version_id | task_id
1 | 3000 | 1 | 2
2 | 5000 | 1 | | 1

내가 엔티티 프레임 워크를

TASK_ID을 사용하여 다음과 같은 결과를 얻을이 테이블에 가입해야 task_name | project_id | budget_version | budget_id | 비용
1 | task1 | 1 | 1 | 2 | 5000
2 | task2 | 1 | 1 | 1 | 3000
3 | task3 | 1 | NULL | NULL | NULL

선택 tsk.id, tsk.name, tsk.project_id, bgtver.id, bgt.id, 작업 쯧에서 bgt.cost 왼쪽 외부는 tsk.project_id = bgtver.project_id에 bgtver BUDGET_VERSIONS 가입 왼쪽 외부는 bgtver.id = bgt.budget_version_id 및 tsk.id = bgt.task_id 에 예산 BGT 에 참여할 경우 bgtver.id = 1

이 내가

var에 budgetlists = _worker 지금까지 시도한 것입니다 .Budgets.Get(). GroupJoin (_worker.BudgetVersions.Get(), rb => rb.budget_version_id, rbv => rbv.id, (rb, rbrbv) => 새로운 {rb, rbrbv}) SelectJany ( @t => @ t.rbrbv.DefaultIfEmpty()). SelectMany ( @p => @ p.tskrb.DefaultIfEmpty (rbrbv, tskrb) => tsk.id, tsk.id, (rbrbv, tskrb) => 새로운 {rbrbv, tskrb}());

+0

http://stackoverflow.com/questions/21051612/entity-framework-join-3-tables –

답변

1

이 작동합니다 : 당신이 왼쪽 외부를 어떻게

var result = from tsk in tasks 
       join bv in budget_versions on tsk.proj_id equals bv.proj_id into g1 
       from bgtver in g1.DefaultIfEmpty() 
       join b in budgets on new { bgtver_id = bgtver.id, tsk.id } equals new { bgtver_id = b.budget_version_id, id = b.task_id } into g2 
       from bgt in g2.DefaultIfEmpty() 
       select new Result 
       { 
        task_id = tsk.id, 
        task_name = tsk.name, 
        project_id = tsk.proj_id, 
        budget_version = bgtver.id, 
        budget_id = bgt == null ? (int?)null : bgt.id, 
        cost = bgt == null ? (int?)null : bgt.cost 
       }; 

Here 년대는 LINQ에 합류했다.

관련 문제