كيف يمكنني تشغيل هذه لينك ينضم إلى ينضم إلى الخارجي الأيسر؟

StackOverflow https://stackoverflow.com/questions/1106038

سؤال

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 إلى SQL وأحتاج إلى مساعدة في معرفة كيفية تشغيل هذا إلى انضمام خارجي يساري، بدلا من انضمام داخلي.

من هذا الاستعلام أعلاه، فأنا أتطلع إلى الحصول على جميع الوكالات من جدول الوكالات، ثم يمكن أن تكون السجلات الموجودة على اليمين (EnterpriseD، وتصحيحها، إلخ) خالية، إلخ إذا لم يكن هناك سجلات.

أنا من شبه المؤكد أنني بحاجة إلى استخدام SelectMany لكنني يمكن أن أستخدم بعض الإرشادات التي تحول تلك الإنضمام إلى الأعمال الخارجية اليسرى، لذلك لدي قائمة بجميع الوكالات، ثم سجلاتها المحتملة على اليمين.

هل كانت مفيدة؟

المحلول

أدناه هو بعض الكود الذي يمكن أن تبدأ.

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

نصائح أخرى

هنا هو مثال جيد على كيفية القيام بذلك. من المهم عدم نسيان القيم الخالية التي يمكن أن تعيدها - هذا قليلا من الصعب مرة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top