Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用Linq左连接多个表_Asp.net_Linq - Fatal编程技术网

Asp.net 使用Linq左连接多个表

Asp.net 使用Linq左连接多个表,asp.net,linq,Asp.net,Linq,我知道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      }; 那么多重连接呢?这是

我知道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,
                         };

每个联接表都可以有“null”字段。有什么可以帮我的吗,谢谢

多连接应该看起来很相似-它变得很详细,但我会尝试一下。 您可能还需要在最后的
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,
                         };
似乎还有另一种方法可以进行外部连接,但没有什么东西可以测试,我甚至不确定在这种情况下是否可以使用它-如果您感兴趣,请查看本文的答案:

这种说法的问题在于它的翻译。只有第一个联接将被转换为左联接,其他联接将是具有允许空值条件的内部联接。搜索了几个示例,这是我的情况下唯一有效的联接。我不断收到“对象引用未设置为对象实例”错误