Linq空引用值与数据库ID匹配

时间:2015-03-19 18:17:09

标签: c# linq-to-sql

在我的代码中有一个ddlitemid可以为null,在Linq查询中我的代码就像

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

如果我的数据库中不存在ddlitemid,则会出现错误,我想处理空引用对象错误

3 个答案:

答案 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。它有两个抽奖。

  1. 您始终需要对FirstOrDefault()进行空检查。
  2. 效率不高。
  3. 关于第二点: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;
}

这样您就不必担心空引用异常,因为您首先检查存在。