Considere os métodos de extensão IEnumerable SingleOrDefault()
eFirstOrDefault()
Documentos MSDN queSingleOrDefault
:
Retorna o único elemento de uma sequência ou um valor padrão se a sequência estiver vazia; esse método lança uma exceção se houver mais de um elemento na sequência.
enquanto que FirstOrDefault
a partir da MSDN (presumivelmente quando se utiliza um OrderBy()
ou OrderByDescending()
ou nenhuma),
Retorna o primeiro elemento de uma sequência
Considere algumas consultas de exemplo, nem sempre é claro quando usar esses dois 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?
Questão
Quais convenções você segue ou sugere ao decidir usar SingleOrDefault()
e FirstOrDefault()
em suas consultas LINQ?