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 にかなり慣れていないため、これを内部結合ではなく左外部結合に変換する方法を理解するのに助けが必要です。
上記のクエリから、Agencies テーブルのすべての機関を探しています。レコードが存在しない場合、右側のレコード (EnterpriseID、CorrectedDate など) は null になる可能性があります。
SelectMany を使用する必要があることは確かですが、これらの結合を LEFT OUTER JOINS に変換するガイダンスを使用できるので、すべてのエージェンシーのリストと、右側に可能なレコードがあります。