Question

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,

                                      });

Alors, je suis encore assez nouveau pour LINQ to SQL et j'ai besoin d'aide pour déterminer comment transformer cela en une jointure externe gauche, plutôt que d'une jointure.

A partir de cette requête ci-dessus, je suis à la recherche d'avoir tous les organismes de la table agences, puis les enregistrements à droite (EnterpriseID, CorrectedDate, etc.) peut être nul, etc s'il existe aucun enregistrement.

Je suis assez certain que je dois utiliser SelectMany mais je pourrais utiliser quelques conseils tournant ces jointures dans LEFT OUTER REJOINT, j'ai donc une liste de tous les organismes puis leurs dossiers possibles sur la droite.

Était-ce utile?

La solution

Ci-dessous un code qui peut vous aider à démarrer.

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

Autres conseils

est un bon exemple de la façon de le faire. Il est important de ne pas oublier les valeurs nulles que celles-ci peuvent ramener -. Cela m'a peu dur une fois

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top