连接具有相同ID的2列时出现NullReferenceException

本文关键字:2列 NullReferenceException ID 连接 | 更新日期: 2023-09-27 17:59:27

情况是,我加入了两个ID相同的列,最终得到了一个单列表,我的问题是一些信息没有联系人,所以这行(b => b.InfoID == a.ID)返回null或false,并显示NullReferenceException错误,有人能帮我解决Linq中的问题吗??

这是之前我的表格显示的内容

|     Name     |    Address   |     Cellphone    |     Email      | 
|     John     |     NY       |       n/a        |   johndoe@y.c  |
|     John     |     NY       |    123456781     |       n/a      |

我希望我的输出是一个线性组合

|     Name     |    Address   |     Cellphone    |     Email      | 
|     John     |     NY       |     123456781    |   johndoe@y.c  |

这是我的Linq,它显示Joined表,但当Info还没有Contact时,它会返回NullReferenceError

var an = (from a in db.Info  
              from b in db.Contact.Where(b => b.InfoID == a.ID && b.ContactTypeID == 56 && b.LogicalDelete == false).DefaultIfEmpty()
              from c in db.Contact.Where(c => c.InfoID == a.ID && c.ContactTypeID == 59 && c.LogicalDelete == false).DefaultIfEmpty()           
              where 
              select new
              {
                  a.ID,
                  a.LastName,
                  a.FirstName,
                  a.MiddleName,
                  Email = b.Values,
                  Cellphone = c.Values,
              }).ToList();

连接具有相同ID的2列时出现NullReferenceException

您应该检查b或c对象是否为null或与此不同

   var an = (from a in db.Info  
          from b in db.Contact.Where(b => b.InfoID == a.ID && b.ContactTypeID == 56 && b.LogicalDelete == false).DefaultIfEmpty()
          from c in db.Contact.Where(c => c.InfoID == a.ID && c.ContactTypeID == 59 && c.LogicalDelete == false).DefaultIfEmpty()           
          where 
          select new
          {
              a.ID,
              a.LastName,
              a.FirstName,
              a.MiddleName,
              Email = b==null? "" : b.Values,
              Cellphone = c==null? "" : c.Values,
          }).ToList();

您正在使用DefaultIfEmpty方法,因此对象b或c可能为null。