Entity Framework 4 Single() vs First() vs FirstOrDefault()

asfsadf picture asfsadf · Aug 15, 2010 · Viewed 76.8k times · Source

I'm having a devil of a time finding a comparison of the different ways to query for a single item, and when to use each.

Does anyone have a link that compares all these, or a quick explanation as to why you would use one over the other? Are there still more operators that I am unaware of?

Thank you.

Answer

Steve Willcock picture Steve Willcock · Aug 15, 2010

Here is an overview of the different methods:

  • Find() - when you want to get an item by primary key. This will return null if it can't find an item. It will look in the context before going to the database (as pointed out by Yaron in the comments) which can be an important efficiency factor if you need to get the same entity multiple times while the same context is alive.

  • Single() - when you expect exactly one item to be returned by a query. This will throw an exception if the query does not return exactly one item.

  • SingleOrDefault() - when you expect zero or one items to be returned by a query (i.e. you are not sure if an item with a given key exists). This will throw an exception if the query does not return zero or one items.

  • First() - when you expect one or more items to be returned by a query but you only want to access the first item in your code (ordering could be important in the query here). This will throw an exception if the query does not return at least one item.

  • FirstOrDefault() - when you expect zero or more items to be returned by a query but you only want to access the first item in your code (i.e. you are not sure if an item with a given key exists)