[英]c# linq exception: object reference not set to an instance of an object
当我运行 linq 查询时,只有在可以找到项目时才会返回结果; 如果未找到任何项目,则会引发异常“未将对象引用设置为对象的实例”
我怎么不抛出这个异常? 即使结果为空,我也只想返回结果。
var id = db.table.Where(a => a.item == passed_item).FirstOrDefault().id;
如果未找到对象,则此方法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);
下一步是一样的。
您可以改用 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
属性的默认值是什么(空或零), id
都将被分配
https://stackoverflow.com/users/4490058/kugan-kumar的以下回答帮助了我。 想提出一个观点,但不幸的是几天前才在这个网站上注册。 var id = (db.table.FirstOrDefault(a => a.item ==passed_item))?.id;
尽管如此,@Kugan-kumar 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.