Linq加入投掷例外

时间:2017-09-21 06:20:41

标签: c# linq

我正在尝试使用多个表的左连接 这是正常工作,直到现在引入另一个表(tb4) 它没有设置投掷对象引用。

在引入tb4之前,我从早期的resultset获得3条记录,其中stateId = null。 但是因为我在我的上一个连接中使用相同的id(即stateid),它在aa即aa(aa.StateId)中变为null。所以,它正在投掷 例外。我们可以在应用连接时处理这个问题,如果连接键变为null,我们该如何处理它。

from tb1 in this.table1  join tb2 in table2 on tb1.Id equals tb2.fkId into temptbl
from aa in temptbl.DefaultIfEmpty()
join tb3 in table3 on tb1.Id equals tb3.StudentId into studentInfo
from pp in studentInfo.DefaultIfEmpty()
join state in tb4 on aa.StateId equals state.StateId into statesTemp
from ss in statesTemp.DefaultIfEmpty()
select new MyModel
{  
    City = aa == null ? string.Empty : aa.City + ", ",
    State = ss == null ? string.Empty : ss.State1,
    PostalCode = aa == null ? string.Empty : aa.PostalCode,
    studentid = pp.PeopleId
}).ToList()

1 个答案:

答案 0 :(得分:2)

问题是当您离开加入表tb4时,您正在访问aa的{​​{1}}媒体资源。但是StateId本身是左连接的结果,因此可能为null。访问其属性将抛出异常。

当您使用C#5.0时,您应该:

aa

对于C#6.0及更新版本,您可以改为使用join state in tb4 on (aa == null ? null : aa.StateId) equals state.StateId null传播运算符。