Procedura: gestire valori null nelle espressioni di query (Guida per programmatori C#)

In questo esempio viene illustrato come gestire i possibili valori null negli insiemi di origine. Un insieme di oggetti quale IEnumerable<T> può contenere elementi il cui valore è null. Se un insieme di origine è null o contiene un elemento il cui valore è null e la query non gestisce valori null, verrà generata un'eccezione NullReferenceException quando si esegue la query.

Esempio

È possibile codificare in modo sicuro per evitare un'eccezione di riferimento null come illustrato nell'esempio seguente:

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 };

Nell'esempio precedente la clausola where esclude tutti gli elementi null nella sequenza di categorie. Questa tecnica è indipendente dal controllo null nella clausola join. In questo esempio è possibile utilizzare l'espressione condizionale con null poiché Products.CategoryID è di tipo int?, ovvero una forma abbreviata di Nullable<int>.

Se in una clausola join solo una delle chiavi di confronto è un tipo valore che ammette valori null, è possibile eseguire il cast della altre chiavi a un tipo che ammette valori null nell'espressione di query. Nell'esempio seguente si supponga che EmployeeID sia una colonna contenente valori di tipo 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 };
}

Vedere anche

Riferimenti

Tipi nullable (Guida per programmatori C#)

Nullable<T>

Concetti

Espressioni di query LINQ (Guida per programmatori C#)