Es realmente muy simple: Single
devuelve un solo elemento y lanza una excepción si no hay ninguno o más de un elemento. First
devolverá el primer artículo o lo arrojará cuando no haya ningún artículo. FirstOrDefault
devolverá el primer artículo o devolverá el valor predeterminado (que es null
en caso de que el tipo dado sea un tipo de referencia) cuando no haya ningún artículo.
Este es el comportamiento que se supone que debe tener la API. Sin embargo, tenga en cuenta que la implementación subyacente podría tener un comportamiento diferente. Si bien Entity Framework obedece a esto, un O / RM como LLBLGen también puede regresar null
al llamar, lo First
cual es algo muy extraño. Esta fue una decisión muy extraña (y obstinada) del diseñador IMO.
Sales.OrderByDescending(s => s.TotalValue).First();
Single
oSingleOrDefault
consultará 2 registros (límite 2) mientras queFirst
oFirstOrDefault
consultará 1 (límite 1).