我正在尝试制作一份单位清单,如果执行审计日期,则需要对审计日期进行审计,如果空白则不进行审计。
我的Get方法中有以下内容:
.about-border {
display: block;
width: 80px;
height: 3px;
background: #f1cd8f;
margin: 20px auto;
}
/* Optional CSS to center align the heading text*/
.about h1, .about h2 {
text-align: center;
}
然而,当我运行它时,我得到了
对象引用未设置为对象的实例。
在auditReportList变量上。
看看调试,在三个循环之后确实看起来是null,我假设在那种情况下,DefaultIfEmpty会启动,以便a == null可以在select中使用但是它似乎没有工作
答案 0 :(得分:1)
在某些情况下防止null(三元a == null ? ... : ...
)而忘记其他情况则是错误的。你应该防范所有情况。此处,未在UnitId
,StnCommId
和WatchCommId
上完成。
旁注:在我的团队中,我已经要求禁止linq sql之类的语法。在我看来,这是一个错误的好主意'。在.Net中编写类似编译查询的sql很有吸引力,但实际上我们发现它们比基于linq lambda的扩展(如Where(a => ...)
,Select(a => ...)
,...)更不易读和理解。
答案 1 :(得分:0)
您的问题在于行from a in ur.DefaultIfEmpty()
。如果ur
为空,则a
的值为null
StnAssureAuditReport
,那么当查询尝试评估u.UnitId
时,您会得到NullReferenceException
}。
from a in ur.DefaultIfEmpty() select { u.UnitId }
的使用仅在ur
为IQueryable<StnAssureAuditReport>
时有效 - 对SQL的翻译会自动为您处理null
个案。但是当ur
为IEnumerable<StnAssureAuditReport>
时(就像你的情况一样),u.UnitId
会被评估并引发空异常。
我专注于u.UnitId
属性,但所有u.*
次调用都是如此。