对不起,如果我的英语不好。
我正在进行搜索,我正在使用JSon来进行查询,
当我使用下一个JSON从数据库获取数据时:
Json(db.CertificationHeaders.ToList().Join(db.CertificationDetails, c =>
c.HeaderCertificationID, cd => cd.HeaderCertificationID, (c, cd) => new { c,
cd })
.Where((d => (d.c.PlanID.ToString().Contains(planID)) &&
d.cd.InternalConsecutive.Contains(internalConsecutive) ||
d.cd.SecurityConsecutive.Contains(securityConsecutive) ||
d.c.RequestDate.Value.Year.ToString().Contains(year) ||
d.c.DateGrant.Contains(grantDate)))
一切顺利,直到这部分代码:
d.cd.SecurityConsecutive.Contains(securityConsecutive)
当来自数据库的信息来自" null"我得到了
NullReferenceExeption
我一直在做研究,并且信息说当数据库中的值为null时会出现此错误,因此问题是: 我怎么能避免它?
答案 0 :(得分:1)
您必须过滤掉null
个实例。替换:
d.cd.SecurityConsecutive.Contains(securityConsecutive)
使用:
(d.cd.SecurityConsecutive != null && d.cd.SecurityConsecutive.Contains(securityConsecutive))
首先检查SecurityConsecutive
和是否仅为空是否会调用Contains
。这要归功于&&
运算符只检查第二个操作数,如果第一个操作数为真。将它全部包含在括号中会使外部Where
将其视为单个语句。只有当两个内部表达式(!=
和Contains
)都为真时才会成立。
答案 1 :(得分:0)
您需要添加更多防护代码。如果你有最新版本的.NET,它会变得容易一些:
Json(db.CertificationHeaders
.ToList()
.Join(db.CertificationDetails, c => c.HeaderCertificationID,
cd => cd.HeaderCertificationID, (c, cd) => new { c, cd })
.Where((d => (d.c.PlanID?.ToString().Contains(planID)) &&
d.cd.InternalConsecutive?.Contains(internalConsecutive) ||
d.cd.SecurityConsecutive?.Contains(securityConsecutive) ||
d.c.RequestDate?.Year.ToString().Contains(year) ||
d.c.DateGrant?.Contains(grantDate)));
?
语法称为null-conditional operator
,您可以在此处了解详情:https://msdn.microsoft.com/en-us/magazine/dn802602.aspx。
希望这有帮助!