SingleOrDefault() Vs. FirstOrDefault() in LINQ Query

Single() / SingleOrDefault() First () / FirstOrDefault()

Single(): There is exactly 1 result, an exception is thrown if no result is returned or more than one result.

SingleOrDefault(): Same as Single(), but it can handle the null value.

First(): There is at least one result, an exception is thrown if no result is returned.

FirstOrDefault(): Same as First(), but not thrown any exception or return null when there is no result.

Single() asserts that one and only one element exists in the sequence. First() simply gives you the first one.

When to use?

Use Single / SingleOrDefault() when you are sure there is only one record present in a database or you can say if you querying on a database with the help of the primary key of the table.

When to use?

Developers may use First () / FirstOrDefault() anywhere when they require a single value from a collection or database.

Single() or SingleOrDefault() will generate a regular TSQL like "SELECT ...". The First() or FirstOrDefault() method will generate the TSQL statement like "SELECT TOP 1..."
In the case of Fist / FirstOrDefault, only one row is retrieved from the database so it performs slightly better than single / SingleOrDefault. such a small difference is hardly noticeable but when a table contains a large number of columns and rows, at this time performance is noticeable.