Pergunta

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,

                                      });

Então, eu ainda sou muito novo para LINQ to SQL e eu preciso de ajuda para descobrir como transformar isso em uma junção externa esquerda, em vez de uma junção interna.

A partir desse consulta acima, eu estou olhando para ter todas as agências da tabela de Agências e, em seguida os registros sobre o direito (EnterpriseID, CorrectedDate, etc) pode ser nulo, etc, se não existem registros.

Estou bastante certo de necessidade eu usar SelectMany mas eu poderia usar alguma orientação transformar essas associações em esquerda junções externas, então eu tenho uma lista de todas as agências, em seguida, suas possíveis registros à direita.

Foi útil?

Solução

Abaixo está um código que pode começar.

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

Outras dicas

Aqui é um bom exemplo de como fazê-lo. É importante não esquecer os valores nulos que estes podem trazer de volta -. Este bit me difícil uma vez

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top