来自数据库 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。它有两个缺点。

  1. 您始终需要对 FirstOrDefault() 进行空检查。
  2. 效率不高。

关于第二点:FirstOrDefault() 从数据库中抓取整个实体,而您只使用其中的一个字段。你可以用一块石头杀死两只鸟:

valuecheck = _allQuestions.Where(x => x.nID == ddlItemId)
                          .Select(q => q.strName)
                          .FirstOrDefault();

.FirstOrDefault() ?? string.Empty.