2009-07-09 84 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连接转换为左外连接?

从上面的查询来看,我希望Agencies表中有所有代理,然后右边的记录(EnterpriseID,CorrectedDate等)可以为空,如果没有记录存在。

我很确定我需要使用SelectMany,但我可以使用一些指导将这些连接转换为左外连接,所以我列出了所有代理然后右边的可能记录。

回答

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

这是什么?......组加入as ... equals ...到xs = group ...`语法中?我以前没见过这样的组,我似乎无法找到任何文档。 – 2014-08-07 19:43:54

0

Here是如何做到这一点的一个很好的例子。 重要的是不要忘记它们可以带回的空值 - 这让我难以忍受一次。

+0

我不认为这适用。它不会在表中显示左连接。 – Sentinel 2012-02-15 14:33:18