Gewusst wie: Behandeln von NULL-Werten in Abfrageausdrücken (C#-Programmierhandbuch)

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

Referenz

Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)

Nullable<T>

Konzepte

LINQ-Abfrageausdrücke (C#-Programmierhandbuch)