c#linq exception:对象引用未设置为对象的实例

时间:2014-11-21 17:19:12

标签: c# linq exception-handling

当我运行linq查询时,只有在找到项目时才会返回结果;如果没有找到任何项目,则抛出异常“对象引用未设置为对象的实例”

我怎么不抛出这个例外?我只希望返回结果,即使它是空的。

var id = db.table.Where(a => a.item == passed_item).FirstOrDefault().id;

3 个答案:

答案 0 :(得分:15)

如果找不到对象,此方法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);

,下一步是相同的。

答案 1 :(得分:1)

var id = (from a in db.table
      where a.item == passed_item
      select a.id).FirstOrDefault();

这将确保它只在找到某些内容时尝试取消引用id。其他方面,无论id属性的默认值是(null还是零),都将分配id

答案 2 :(得分:0)

您可以改用Null条件运算符:

int? id = db.table.Where(a => a.item == passed_item).FirstOrDefault()?.id;

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/member-access-operators#null-conditional-operators--and-