[当我运行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);
与下一步相同。
var id = (from a in db.table
where a.item == passed_item
select a.id).FirstOrDefault();
这将确保仅在发现某些内容后才尝试取消引用id
。否则,将为id
分配id
属性的默认值为(空或零)
您可以改用Null条件运算符:
int? id = db.table.Where(a => a.item == passed_item).FirstOrDefault()?.id;