在我的代码中有一个ddlitemid可以为null,在Linq查询中我的代码就像
valuecheck = _allQuestions.Where(x => x.nID == ddlItemId).FirstOrDefault().strName;
如果我的数据库中不存在ddlitemid,则会出现错误,我想处理空引用对象错误
答案 0 :(得分:2)
然后将FirstOrDefault
的通话与strName
的访问分开。您也可以删除Where
并将lambda过滤器放入FirstOrDefault
。
var quesiton = _allQuestions.FirstOrDefault(x => x.nID == ddlItemId);
if(question != null)
{
valuecheck = question.strName;
}
答案 1 :(得分:2)
我经常看到这种模式FirstOrDefault().SomeProperty
。它有两个抽奖。
FirstOrDefault()
进行空检查。关于第二点:FirstOrDefault()
从数据库中获取整个实体,并且只使用一个字段。你可以通过以下方式一举两得:
valuecheck = _allQuestions.Where(x => x.nID == ddlItemId)
.Select(q => q.strName)
.FirstOrDefault();
或.FirstOrDefault() ?? string.Empty
。
答案 2 :(得分:1)
我通常处理此方法的方法是将我的linq结果分配给变量,然后检查是否为空。
var tempStorage = _allQuestions.Where(x => x.nID == ddlItemId).FirstOrDefault();
if(tempStorage != null)
{
valuecheck = tempStorage.strName;
}
这样您就不必担心空引用异常,因为您首先检查存在。