首页 > 解决方案 > System.Linq.Queryable.FirstOrDefault(...) 返回空值

问题描述

当数据库表为空时,我访问结果的请求会引发错误。

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 }
                   ).Take(1);

return Convert.ToInt32(resultEthnie.FirstOrDefault().qonv_fk_num_question);

有没有办法在查询结果为空时有一个默认的返回结果值?

标签: c#asp.net.netlinq

解决方案


有没有办法在查询结果为空时有一个默认的返回结果值?

您收到错误是因为您尝试访问查询结果的第一个元素而不检查它是否为空。

要解决问题?,请在方法后使用运算符FirstOrDefault()

resultEthnie.FirstOrDefault()?.qonv_fk_num_question; // ? will escape accessing to 
                                    // qonv_fk_num_question if the result is null

但是在这里我看到了一个更优雅的解决方案。而不是使用过滤,选择和稍后尝试访问结果的第一个元素,简单使用FirstOrDefault()方法lambda version

var result = db.N_QONV.FirstOrDefault(k => (k.qonv_fk_numvol == clientId) &&
                                           (k.qonv_fk_eon_id == 64));

return Convert.ToInt32(result?.qonv_fk_num_question);

推荐阅读