Behandeln von NULL-Werten in AbfrageausdrückenHandle null values in query expressions

Dieses Beispiel zeigt, wie mögliche NULL-Werte in Quellauflistungen behandelt werden.This example shows how to handle possible null values in source collections. Eine Objektauflistung wie z.B. IEnumerable<T> kann Elemente enthalten, deren Wert NULL ist.An object collection such as an IEnumerable<T> can contain elements whose value is null. Wenn eine Quellauflistung NULL ist oder ein Element enthält, dessen Wert NULL ist, und die Abfrage keine NULL-Werte verarbeitet, wird eine NullReferenceException ausgelöst, wenn Sie die Abfrage ausführen.If a source collection is null or contains an element whose value is null, and your query does not handle null values, a NullReferenceException will be thrown when you execute the query.

BeispielExample

Sie können defensiv codieren, um eine Nullverweisausnahme wie im folgenden Beispiel dargestellt zu vermeiden:You can code defensively to avoid a null reference exception as shown in the following example:

var query1 =
    from c in categories
    where c != null
    join p in products on c.ID equals
        p?.CategoryID
    select new { Category = c.Name, Name = p.Name };

Im vorherigen Beispiel filtert die where-Klausel alle NULL-Elemente in der Reihenfolge der Kategorien heraus.In the previous example, the where clause filters out all null elements in the categories sequence. Diese Technik ist unabhängig von der NULL-Überprüfung in der join-Klausel.This technique is independent of the null check in the join clause. Der bedingte Ausdruck mit NULL in diesem Beispiel funktioniert, da Products.CategoryID vom Typ int? ist, was eine Abkürzung für Nullable<int> ist.The conditional expression with null in this example works because Products.CategoryID is of type int? which is shorthand for Nullable<int>.

BeispielExample

Wenn in einer join-Klausel nur einer der Vergleichsschlüssel ein Nullable-Werttyp ist, können Sie den anderen im Abfrageausdruck in einen Nullable-Typ umwandeln.In a join clause, if only one of the comparison keys is a nullable value type, you can cast the other to a nullable type in the query expression. Im folgenden Beispiel wird angenommen, dass EmployeeID eine Spalte mit Werten vom Typ int? ist:In the following example, assume that EmployeeID is a column that contains values of type int?:

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 auchSee also

Nullable<T>
LINQ-AbfrageausdrückeLINQ query expressions
Nullable-TypenNullable types