LINQ Interview Question #50

How should you choose between First, Single, and their OrDefault versions?

Filtering, Projection, Ordering & Element Operators Mid-Level Intermediate

Quick Interview Answer

Choose based on the cardinality your business rule expects. First means at least one result is required but additional matches are acceptable. Single means exactly one result is required. FirstOrDefault means zero or more matches are possible and only the first is needed. SingleOrDefault means zero or one match is valid, while duplicates are an error.

Detailed Explanation

Choose based on the cardinality your business rule expects. First means at least one result is required but additional matches are acceptable. Single means exactly one result is required. FirstOrDefault means zero or more matches are possible and only the first is needed. SingleOrDefault means zero or one match is valid, while duplicates are an error.

The operator should communicate the intended invariant instead of being chosen only to avoid exceptions. For database-backed uniqueness, also enforce the rule with an appropriate unique constraint or index rather than relying solely on LINQ.

Code Example

// At least one expected:
var latest = orderedItems.First();

// Zero or more; first is enough:
var optional = items.FirstOrDefault(x => x.Code == code);

// Exactly one expected:
var configuration = settings.Single(x => x.Key == key);

// Zero or one expected:
var account = accounts.SingleOrDefault(
    x => x.AccountNumber == number);