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和我需要帮助搞清楚如何把它变成一个左外连接,而不是内部连接。

从上面查询,我希望有从机构表中的所有机构,然后记录在右边(EnterpriseID,CorrectedDate等),可以为空,如果等不存在任何记录。

我相当肯定,我需要使用,但的SelectMany我可以使用一些指导转向那些加入到左外连接,所以我有,右侧全部是机构那么他们可能记录的清单。

有帮助吗?

解决方案

下面是一些代码,可以让你开始。

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,
});

其他提示

这里是如何做到这一点的好例子。 不要忘记,这些可以带回空值是很重要的 - 这一点我难,一旦

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top