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;
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.
You could use the Null-conditional operator instead:
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();
This will ensure that it only tries to dereference id
when something is found. Other wise, id
will be assigned whatever the default value for the id
property is (null or zero)
The following answer by https://stackoverflow.com/users/4490058/kugan-kumar helped me. Wanted to give a point but unfortunately just registered few days ago on this site. var id = (db.table.FirstOrDefault(a => a.item == passed_item))?.id;
nevertheless, @Kugan-kumar thanks.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.