【问题标题】:How to validate null values on linq如何验证 linq 上的空值
【发布时间】:2018-01-26 05:05:20
【问题描述】:

对不起,如果我的英语不好。

我正在努力进行搜索,我正在使用 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

我一直在做研究,信息说当数据库中的值为空时会出现此错误,所以问题是: 如何避免?

【问题讨论】:

  • 我对那些无事可做的人有一个严重的问题,他们只能从一个帖子到另一个帖子投反对票。完全没有公民意识!

标签: c# json linq asp.net-mvc-5


【解决方案1】:

您必须过滤掉 null 实例。替换:

d.cd.SecurityConsecutive.Contains(securityConsecutive)

与:

(d.cd.SecurityConsecutive != null && d.cd.SecurityConsecutive.Contains(securityConsecutive))

这首先检查是否SecurityConsecutive 并且只有当它不为空时才会调用Contains。这要归功于&& 运算符仅在第一个操作数为真时才检查第二个操作数。将其全部括在括号中会使外部 Where 将其视为单个语句。只有当两个内部表达式(!=Contains)都为真时,它才会为真。

【讨论】:

  • @DannyFernández 很高兴我能帮上忙。请务必将答案标记为accepted,祝您好运
【解决方案2】:

您需要放置更多的保护代码。如果您拥有最新版本的 .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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多