Asp.net

使用 Linq 左連接多個表

  • November 24, 2017

我知道 Linq 的左連接是這樣的:

var q=from e in db.Employes    
     join o in db.Orders on e equals o.Emoloyee into ords  
     from on in ords.DefautIfEmpty()
     select new
     {      
        e.FirstName,     
        e.LastName   
      };

那麼多重連接呢?這是我的程式碼

var personalInfoQuery = from t in crnnsupContext.Tombstones
                       join p in crnnsupContext.ProvStates on t.ProvinceState equals p.ProvinceStateID 
                       join n in crnnsupContext.NursingSchools on t.NursingSchool equals n.SchoolID 
                       join i in crnnsupContext.InitialEducations on t.InitialEducation equals SqlFunctions.StringConvert((double)i.InitalEducationID, 1)
                       join g in crnnsupContext.tbl_GraduatedProvCountry on t.GradPovCountry equals g.id
                       where t.RegNumber == _username
                       select new CPersonalInfo
                       {
                           ProvState = p,
                           Tombstone = t,
                           NursingSchool = n,
                           InitialEducation = i,
                           GraduatedProvCountry = g,
                        };

每個連接表都可以有“空”欄位。有什麼可以幫助我的,謝謝

多連接應該看起來非常相似 - 它變得非常冗長,但我會嘗試一下。您可能還需要在最後where一行進行一些空值檢查。

var personalInfoQuery = from t in crnnsupContext.Tombstones
                       join p in crnnsupContext.ProvStates on t.ProvinceState equals p.ProvinceStateID into group1
                       from g1 ini group1.DefaultIfEmpty()
                       join n in crnnsupContext.NursingSchools on g1.NursingSchool equals n.SchoolID into group2
                       from g2 in group2.DefaultIfEmpty()
                       join i in crnnsupContext.InitialEducations on g2.InitialEducation equals SqlFunctions.StringConvert((double)i.InitalEducationID, 1) into group3
                       from g3 in group3.DefaultIfEmpty()
                       join g in crnnsupContext.tbl_GraduatedProvCountry on g3.GradPovCountry equals g.id into group4
                       from g4 in group4.DefaultIfEmpty()
                       where g4 == null || g4.RegNumber == _username
                       select new CPersonalInfo
                       {
                           ProvState = p,
                           Tombstone = t,
                           NursingSchool = n,
                           InitialEducation = i,
                           GraduatedProvCountry = g,
                        };

似乎還有另一種進行外部連接的方法,但是沒有東西可以測試它我什至不確定在這種情況下是否可以使用它 - 如果您有興趣,請查看這篇文章的答案: outer加入linq

引用自:https://stackoverflow.com/questions/10920653