【发布时间】:2022-03-02 15:49:22
【问题描述】:
当我运行一个 linq 查询时,我只有在可以找到一个项目时才返回结果;如果没有找到项目,则抛出异常“对象引用未设置为对象的实例”
如何不抛出此异常?我只想返回一个结果,即使它是空的。
var id = db.table.Where(a => a.item == passed_item).FirstOrDefault().id;
【问题讨论】:
标签: c# linq exception-handling
当我运行一个 linq 查询时,我只有在可以找到一个项目时才返回结果;如果没有找到项目,则抛出异常“对象引用未设置为对象的实例”
如何不抛出此异常?我只想返回一个结果,即使它是空的。
var id = db.table.Where(a => a.item == passed_item).FirstOrDefault().id;
【问题讨论】:
标签: c# linq exception-handling
如果未找到对象,此方法 FirstOrDefault 将返回 null。因此,如果您尝试读取id 的值,则会引发异常。
避免这种情况的一种方法如下:
// I suppose that the id you want to read is an int.
// If it isn't, please change the code correspondingly.
int id;
// Try to get the record.
var record = db.table.Where(a => a.item == passed_item)
.FirstOrDefault();
// If you find the record you are looking for, then read it's id.
if(record != null)
{
id = record.id;
}
更新
另一种选择是遵循DavidG 在他的评论中提出的建议:
var record = db.Table.FirstOrDefault(a => a.item == passed_item);
下一步也是一样的。
【讨论】:
db.Table.FirstOrDefault(a => a.item == passed_item)
var id = (db.table.FirstOrDefault(a => a.item == passed_item))?.id;
您可以改用 Null 条件运算符:
int? id = db.table.Where(a => a.item == passed_item).FirstOrDefault()?.id;
【讨论】:
var id = (from a in db.table
where a.item == passed_item
select a.id).FirstOrDefault();
这将确保它仅在找到某些内容时尝试取消引用 id。否则,无论id 属性的默认值是(null 或零),id 都将被分配
【讨论】:
我看到 null 中的原因是值之一。
SImageName = (Users.SImageName != null ? Users.SImageName : "User.png")
检查你的数据没有NULL值
var userlist = (from Users in _context.TbUsersInfos
join Orgs in _context.TbBaseOrgs
on Users.NOrgCode equals Orgs.NCode
where
Users.NOrgCode == 1
orderby
Users.NUserCode
select new
{
NUserCode = Users.NUserCode.ToString(),
SImageName = (Users.SImageName != null ? Users.SImageName : "User.png"),
}).ToList();
【讨论】: