Betrachten Sie die IEnumerable-Erweiterungsmethoden SingleOrDefault()
et FirstOrDefault()
MSDN dokumentiert, dass SingleOrDefault
:
Gibt das einzige Element einer Sequenz zurück oder einen Standardwert, wenn die Sequenz leer ist; diese Methode löst eine Ausnahme aus, wenn es mehr als ein Element in der Sequenz gibt.
während FirstOrDefault
von MSDN (vermutlich bei Verwendung eines OrderBy()
oder OrderByDescending()
oder gar keine),
Gibt das erste Element einer Sequenz zurück
Bei einer Handvoll Beispielabfragen ist nicht immer klar, wann diese beiden Methoden zu verwenden sind:
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?
Frage
Welche Konventionen befolgen Sie oder schlagen Sie vor bei der Entscheidung über die Verwendung SingleOrDefault()
et FirstOrDefault()
in Ihren LINQ-Abfragen?