Considere los métodos de extensión IEnumerable SingleOrDefault()
yFirstOrDefault()
MSDN documenta queSingleOrDefault
:
Devuelve el único elemento de una secuencia, o un valor predeterminado si la secuencia está vacía; Este método genera una excepción si hay más de un elemento en la secuencia.
mientras que FirstOrDefault
a partir de MSDN (presumiblemente cuando se utiliza un OrderBy()
o OrderByDescending()
o ninguno en absoluto),
Devuelve el primer elemento de una secuencia.
Considere un puñado de consultas de ejemplo, no siempre está claro cuándo usar estos dos métodos:
var someCust = db.Customers
.SingleOrDefault(c=>c.ID == 5); //unlikely(?) to be more than one, but technically COULD BE
var bobbyCust = db.Customers
.FirstOrDefault(c=>c.FirstName == "Bobby"); //clearly could be one or many, so use First?
var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or does it matter?
Pregunta
¿Qué convenciones sigue o sugiere cuando decide usar SingleOrDefault()
y FirstOrDefault()
en sus consultas LINQ?