Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c# linq exception: object reference not set to an instance of an object

When I run a linq query I get back the results only when an item can be found; if no items are found, it is throwing an exception "object reference not set to an instance of an object"

How do I not throw this exception? I want only to return a result even if it is empty.

var id = db.table.Where(a => a.item == passed_item).FirstOrDefault().id;
like image 807
Demodave Avatar asked Nov 21 '14 17:11

Demodave


2 Answers

This method, FirstOrDefault, will return null, if an object not been found. Hence, if you try to read the value of id, then an exception will be thrown.

One way to avoid this is the following:

// 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;
}

Update

Another option it would be to follow that DavidG suggested in his comment:

var record = db.Table.FirstOrDefault(a => a.item == passed_item);

and the next step is the same.

like image 77
Christos Avatar answered Sep 23 '22 08:09

Christos


You could use the Null-conditional operator instead:

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-

like image 32
Bauer Avatar answered Sep 21 '22 08:09

Bauer