【问题标题】:NullReferenceException when Joining 2 Column with Same ID加入具有相同 ID 的 2 列时出现 NullReferenceException
【发布时间】:2014-06-06 06:04:13
【问题描述】:

情况是我加入了具有相同 ID 的 2 列以最终得到一个单列表,而我的问题是某些信息没有联系人,因此此行 (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 还没有联系人时,它返回 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();

【问题讨论】:

    标签: c# sql linq sql-server-2008


    【解决方案1】:

    您应该检查 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 可能为空。

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2020-09-20
      相关资源
      最近更新 更多