简体   繁体   中英

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;

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;

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM