LINQ: cuándo usar SingleOrDefault frente a FirstOrDefault () con criterios de filtrado

Considere los métodos de extensión IEnumerableSingleOrDefault() yFirstOrDefault()

MSDN documenta queSingleOrDefault:

Devuelve el único elemento de una secuencia, o un valor predeterminado si la secuencia está vacía; este método lanza una excepción si hay más de un elemento en la secuencia.

mientrasFirstOrDefault de MSDN (presumiblemente cuando se usa unOrderBy() oOrderByDescending() 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 sigues o sugieres? cuando se decide utilizarSingleOrDefault() yFirstOrDefault() en sus consultas LINQ?

Respuestas a la pregunta(13)

Su respuesta a la pregunta