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 FirstOrDefaulta 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?