2009-07-09 2 views
1
var auditAgencyRecords = (from ag in db.Agencies 
             join ara in db.AuditRuleAccounts on ag.Agency_Id equals ara.AgencyID 
             join arr in db.AuditRuleResults on ara.AuditRuleAccountID equals arr.AuditRuleAccountID 
             join are in db.AuditRuleEnterprises on arr.AuditRuleEnterpriseID equals are.AuditRuleEnterpriseID 
             where (rules.Select(r => r.EnterpriseID).Contains(arr.AuditRuleEnterpriseID)) 
             select new 
             { 

              AgencyID = ag.Agency_Id, 
              AgencyName = ag.Agency_Name, 
              AuditRuleEnterpriseID = arr.AuditRuleEnterpriseID, 
              AuditRuleEnterpriseName = are.OverrideDisplayName, 
              CorrectedDate = arr.CorrectedDate, 
              NbrDaysToCorrect = arr.NbrDaysToCorrect, 

             }); 

저는 아직 LINQ to SQL에 익숙하지 않아 이것을 내부 조인이 아닌 왼쪽 외부 조인으로 바꾸는 방법을 알아내는 데 도움이 필요합니다.이러한 LINQ 조인을 LEFT OUTER 조인으로 변환하려면 어떻게합니까?

위의 쿼리에서 Agencies 테이블의 모든 대행사를 찾고 레코드가없는 경우 오른쪽 (EnterpriseID, CorrectedDate 등) 레코드가 null 일 수 있습니다.

SelectMany를 사용해야한다는 확신이 있습니다.하지만 조인을 LEFT OUTER JOINS로 바꾸는 지침을 사용할 수 있습니다. 그래서 모든 기관의 목록을 작성한 다음 오른쪽에 가능한 레코드가 있습니다.

답변

2

다음은 시작할 수있는 몇 가지 코드입니다.

var auditAgencyRecords = (
from ag in db.Agencies 
group join ara in db.AuditRuleAccounts on ag.Agency_Id equals ara.AgencyID into AgAra = group 
from w in AgAra.DefaultIfEmpty() 
group join arr in db.AuditRuleResults on ara.AuditRuleAccountID equals arr.AuditRuleAccountID into AraArr = group 
from x in AraArr.DefaultIfEmpty() 
group join are in db.AuditRuleEnterprises on arr.AuditRuleEnterpriseID equals are.AuditRuleEnterpriseID into ArrAre = group 
from y in ArrAre.DefaultIfEmpty() 
where (rules.Select(r => r.EnterpriseID).Contains(arr.AuditRuleEnterpriseID)) 
select new 
{  
    AgencyID = w.Agency_Id, 
    AgencyName = w.Agency_Name,           
    AuditRuleEnterpriseID = y.AuditRuleEnterpriseID, 
    AuditRuleEnterpriseName = y.OverrideDisplayName, 
    CorrectedDate = w.CorrectedDate, 
    NbrDaysToCorrect = w.NbrDaysToCorrect, 
}); 
+0

이'... ... group as a ... as is ... into xs = group ... '구문은 무엇입니까? 이전에 그런 식으로 사용 된 그룹을 보지 못했으며 어떤 문서도 찾을 수없는 것 같습니다. –

0

Here이 좋은 예입니다. null 값을 잊어 버리지 않는 것이 중요합니다. 이러한 null 값은 되돌릴 수 있습니다.

+0

나는 그렇게 생각하지 않습니다. 테이블간에 왼쪽 조인을 표시하지 않습니다. – Sentinel

관련 문제