Compartir a través de


Cómo: Controlar valores Null en expresiones de consultas (Guía de programación de C#)

Actualización: noviembre 2007

Este ejemplo muestra cómo tratar los posibles valores nulos (null) en colecciones de origen. Una colección de objetos tal como un IEnumerable<T> puede contener elementos cuyo valor es null. Si una colección de origen es nula o contiene algún elemento cuyo valor es nulo, y la consulta no controla los valores nulos, se iniciará una excepción NullReferenceException al ejecutar la consulta.

Ejemplo

Puede escribir el código adecuado para evitar una excepción de referencia nula como se muestra en el siguiente ejemplo:

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

En el ejemplo anterior, la cláusula where deja fuera del filtro todos los elementos nulos de la secuencia de categorías. Esta técnica es independiente de la comprobación de valores nulos de la cláusula join. La expresión condicional con null de este ejemplo funciona porque Products.CategoryID es de tipo int?, que es una forma abreviada de Nullable<int>.

En una cláusula join, si sólo una de las claves de comparación es de un tipo de valor que acepta valores null, puede convertir el otro a un tipo que acepte valores null en la expresión de consulta. En el ejemplo siguiente, suponga que EmployeeID es una columna que contiene valores de 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 };
}

Vea también

Tareas

Ejemplo LINQ to Northwind

Conceptos

Expresiones de consultas con LINQ (Guía de programación de C#)

Referencia

Tipos que aceptan valores NULL (Guía de programación de C#)

Nullable<T>