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#)