Как я могу превратить эти объединения LINQ в соединения LEFT OUTER? - PullRequest
1 голос
/ 09 июля 2009
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 и т. Д.) Могут быть нулевыми и т. Д., Если нет записей.

Я вполне уверен, что мне нужно использовать SelectMany, но я мог бы использовать некоторые рекомендации, чтобы превратить эти объединения в ЛЕВЫЕ ВНЕШНИЕ СОЕДИНЕНИЯ, поэтому у меня есть список всех агентств, а затем их возможные записи справа.

Ответы [ 2 ]

2 голосов
/ 10 июля 2009

Ниже приведен код, который поможет вам начать работу.

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 голосов
/ 09 июля 2009

Здесь хороший пример того, как это сделать. Важно не забывать о нулевых значениях, которые они могут вернуть - это немного сложно для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...