Pregunta

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,

                                      });

Por lo tanto, todavía soy bastante nuevo en LINQ a SQL y necesito ayuda para saber cómo convertir esto en una combinación externa izquierda, en lugar de una unión interna.

A partir de ese consulta anterior, Busco tener todas las agencias de la tabla Agencias, y luego los registros de la derecha (EnterpriseID, CorrectedDate, etc) puede ser nulo, etc, si no existen registros.

Estoy bastante seguro de que necesito utilizar SelectMany pero que podría utilizar alguna orientación girando los une en izquierda combinaciones externas, así que tengo una lista de todas las agencias luego sus posibles registros de la derecha.

¿Fue útil?

Solución

A continuación se muestra un código que puede empezar.

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

Otros consejos

Aquí es un buen ejemplo de cómo hacerlo. Es importante no olvidarse de los valores nulos que estos pueden traer de vuelta -. Este bit me duro una vez

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top