Betrachten Sie die IEnumerable-Erweiterungsmethoden SingleOrDefault()
undFirstOrDefault()
MSDN dokumentiert, dassSingleOrDefault
:
Gibt das einzige Element einer Sequenz oder einen Standardwert zurück, wenn die Sequenz leer ist. Diese Methode löst eine Ausnahme aus, wenn die Sequenz mehr als ein Element enthält.
wohingegen FirstOrDefault
von MSDN (vermutlich , wenn eine Verwendung OrderBy()
oder OrderByDescending()
überhaupt nicht oder keine),
Gibt das erste Element einer Sequenz zurück
Betrachten Sie eine Handvoll Beispielabfragen. Es ist nicht immer klar, wann diese beiden Methoden verwendet werden sollen:
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 oder schlagen Sie bei der Entscheidung für die Verwendung SingleOrDefault()
und FirstOrDefault()
in Ihren LINQ-Abfragen vor?