Semantical Difference:
- FirstOrDefaultreturns a first item of potentially multiple (or default if none exists).
- SingleOrDefaultassumes that there is a single item and returns it (or default if none exists). Multiple items are a violation of contract, an exception is thrown.
Performance Difference
- FirstOrDefaultis usually faster, it iterates until it finds the element and only has to iterate the whole enumerable when it doesn't find it. In many cases, there is a high probability to find an item.
- SingleOrDefaultneeds to check if there is only one element and therefore always iterates the whole enumerable. To be precise, it iterates until it finds a second element and throws an exception. But in most cases, there is no second element.
Conclusion
- UseFirstOrDefaultif you don't care how many items there are or when you can't afford checking uniqueness (e.g. in a very large collection). When you check uniqueness on adding the items to the collection, it might be too expensive to check it again when searching for those items.
- UseSingleOrDefaultif you don't have to care about performance too much and want to make sure that the assumption of a single item is clear to the reader and checked at runtime.
- If you result set returns 1 record:- SingleOrDefaultreturns that record
- FirstOrDefaultreturns that record
 If your result set returns many records:- SingleOrDefaultthrows an exception
- FirstOrDefaultreturns the first record
 
 
No comments:
Post a Comment