2008-04-05

First und FirstOrDefault Operatoren

Mit beiden Operatoren kann das erste Element aus einer Liste ermittelt werden.

Die Operatoren verhalten sich anders, wenn der Abfrage ein leeres Resultat zurück liefert. Der Operator First feuert eine InvalidOperationException. FirstOrDefault Operator liefert einen NULL-Wert zurück.

In dem folgenden Beispiel wird die AdventureWorks-Datenbank als Datenquelle verwendet. Es wird versucht, mittels folgende Abfrage die Produkt zu ermitteln, welche an die Produktekategorie (ProductCategory) Bikes und Produktesub-Kategorie (ProductSubcategory) Mountain Bikes zugeortned sind. Als letzte Bedingung wird der Listenpris (ListPrice) kleiner als 500 vernwendet.

AdventureWorksDataContext db = new AdventureWorksDataContext();
IQueryable<Product> qry = from pc in db.ProductCategories
join psc in db.ProductSubcategories on pc.ProductCategoryID equals psc.ProductCategoryID
join p in db.Products on psc.ProductSubcategoryID equals p.ProductSubcategoryID
orderby p.ListPrice
where pc.Name == "Bikes" && psc.Name == "Mountain Bikes" && p.ListPrice < 500
select p;


Die obige Abfrage liefert keine Produkte zurück, weil in der Datenbanktabelle Product kein Produkt die WHERE-Bedingung entspricht.



Wenn jetzt versucht wird, mit dem Operator First den ersten Produkt zu ermitteln, wird eine Exception gefeuert.



image



Dagegen, wenn der Operator FirstOrDefault verwendet wird, wird als Resultat einen NULL-Wert zurück geliefert.



image



Meine Empfehlung ist, den FirstOrDefault Operator verwenden, wenn das Resultat nicht immer einen Wert zurück liefert.

No comments: