来自数据库 ID 的 Linq 空引用值匹配
Linq null reference value match from database id
在我的代码中有一个 ddlitemid 可以为空,在 Linq 查询中我的代码就像
valuecheck = _allQuestions.Where(x => x.nID == ddlItemId).FirstOrDefault().strName;
如果我的数据库中不存在 ddlitemid,它会给出错误我想处理空引用对象错误
我通常处理这个问题的方式是将我的 linq 结果分配给一个变量,然后检查是否为 null。
var tempStorage = _allQuestions.Where(x => x.nID == ddlItemId).FirstOrDefault();
if(tempStorage != null)
{
valuecheck = tempStorage.strName;
}
这样您就不必担心 null ref 异常,因为您首先检查是否存在。
然后将对FirstOrDefault
的调用与对strName
的访问分开。您也可以删除 Where
并将 lambda 过滤器放入 FirstOrDefault
.
var quesiton = _allQuestions.FirstOrDefault(x => x.nID == ddlItemId);
if(question != null)
{
valuecheck = question.strName;
}
我经常看到这种模式 FirstOrDefault().SomeProperty
。它有两个缺点。
- 您始终需要对
FirstOrDefault()
进行空检查。
- 效率不高。
关于第二点:FirstOrDefault()
从数据库中抓取整个实体,而您只使用其中的一个字段。你可以用一块石头杀死两只鸟:
valuecheck = _allQuestions.Where(x => x.nID == ddlItemId)
.Select(q => q.strName)
.FirstOrDefault();
或.FirstOrDefault() ?? string.Empty
.
在我的代码中有一个 ddlitemid 可以为空,在 Linq 查询中我的代码就像
valuecheck = _allQuestions.Where(x => x.nID == ddlItemId).FirstOrDefault().strName;
如果我的数据库中不存在 ddlitemid,它会给出错误我想处理空引用对象错误
我通常处理这个问题的方式是将我的 linq 结果分配给一个变量,然后检查是否为 null。
var tempStorage = _allQuestions.Where(x => x.nID == ddlItemId).FirstOrDefault();
if(tempStorage != null)
{
valuecheck = tempStorage.strName;
}
这样您就不必担心 null ref 异常,因为您首先检查是否存在。
然后将对FirstOrDefault
的调用与对strName
的访问分开。您也可以删除 Where
并将 lambda 过滤器放入 FirstOrDefault
.
var quesiton = _allQuestions.FirstOrDefault(x => x.nID == ddlItemId);
if(question != null)
{
valuecheck = question.strName;
}
我经常看到这种模式 FirstOrDefault().SomeProperty
。它有两个缺点。
- 您始终需要对
FirstOrDefault()
进行空检查。 - 效率不高。
关于第二点:FirstOrDefault()
从数据库中抓取整个实体,而您只使用其中的一个字段。你可以用一块石头杀死两只鸟:
valuecheck = _allQuestions.Where(x => x.nID == ddlItemId)
.Select(q => q.strName)
.FirstOrDefault();
或.FirstOrDefault() ?? string.Empty
.