Gewusst wie: Behandeln von NULL-Werten in Abfrageausdrücken (C#-Programmierhandbuch)
Aktualisiert: November 2007
In diesem Beispiel wird gezeigt, wie mögliche NULL-Werte in Quellauflistungen behandelt werden. Eine Objektauflistung wie IEnumerable<T> kann Elemente enthalten, deren Wert NULL ist. Wenn eine Quellauflistung NULL ist oder ein Element enthält, dessen Wert NULL ist, und die Abfrage keine NULL-Werte behandelt, wird beim Ausführen der Abfrage NullReferenceException ausgelöst.
Beispiel
Sie können defensiv codieren, um eine NULL-Verweisausnahme zu vermeiden, wie im folgenden Beispiel gezeigt:
var query1 =
from c in categories
where c != null
join p in products on c.ID equals
(p == null ? null : p.CategoryID)
select new { Category = c.Name, Name = p.Name };
Im vorherigen Beispiel filtert die where-Klausel alle NULL-Elemente in der Kategoriesequenz aus. Diese Technik ist unabhängig von der NULL-Prüfung in der join-Klausel. Der bedingte Ausdruck mit NULL in diesem Beispiel funktioniert, da Products.CategoryID vom Typ int? ist, was die Kurzform für Nullable<int> ist.
Ist in einer join-Klausel nur einer der beiden Vergleichsschlüssel ein Werttyp, der NULL-Werte zulässt, können Sie den anderen im Abfrageausdruck in einen Typ umwandeln, der auf NULL festgelegt werden kann. Im folgenden Beispiel wird angenommen, dass EmployeeID eine Spalte ist, die Werte vom Typ int? enthält:
void TestMethod(Northwind db)
{
var query =
from o in db.Orders
join e in db.Employees
on o.EmployeeID equals (int?)e.EmployeeID
select new { o.OrderID, e.FirstName };
}
Siehe auch
Aufgaben
Konzepte
LINQ-Abfrageausdrücke (C#-Programmierhandbuch)