System.Linq.Queryable.FirstOrDefault返回null,空表查询报错如何设默认返回值
解决FirstOrDefault返回null时的空引用问题
当然可以设置默认返回值啦!你当前的代码之所以会报错,是因为当数据库里没有匹配的记录时,FirstOrDefault()会返回null,这时候直接访问匿名对象的qonv_fk_num_question属性就会触发空引用异常。下面给你几个简单有效的解决办法:
方案1:直接查询目标字段,用空合并运算符设默认值
把查询改成直接返回目标字段(而不是匿名类型),这样FirstOrDefault()会返回该字段类型的默认值,再用??运算符指定你想要的默认值:
var resultEthnie = (from k in db.N_QONV where k.qonv_fk_numvol == clientId && k.qonv_fk_eon_id == 64 select k.qonv_fk_num_question) .FirstOrDefault(); return resultEthnie ?? 0; // 这里的0就是你要的默认值,可根据需求修改
方案2:保留匿名类型,先判断null再取值
如果你一定要用匿名类型返回结果,可以先检查FirstOrDefault()的返回值是否为null,再决定返回值:
var resultEthnie = (from k in db.N_QONV where k.qonv_fk_numvol == clientId && k.qonv_fk_eon_id == 64 select new { k.qonv_fk_num_question } ) .FirstOrDefault(); // 如果结果不为空就取属性值,否则返回默认值0 return resultEthnie != null ? Convert.ToInt32(resultEthnie.qonv_fk_num_question) : 0;
方案3:用DefaultIfEmpty指定默认值
可以使用DefaultIfEmpty()方法,当查询结果为空时自动插入一个默认值,再用First()获取(这时候不会返回null):
var resultEthnie = (from k in db.N_QONV where k.qonv_fk_numvol == clientId && k.qonv_fk_eon_id == 64 select k.qonv_fk_num_question) .DefaultIfEmpty(0) // 提前设置空结果时的默认值 .First(); return resultEthnie;
这几个方案都能完美解决你的问题,选哪个看你代码的实际场景就好~
内容的提问来源于stack exchange,提问作者KOMARA
相关产品推荐
相关产品推荐

