2012-05-05 17 views
5

Estoy tratando de usar la siguiente consulta linq a sql para obtener el resultado. Pero no es así funciona si parentCategoryId pasa como nulacómo verificar el valor nulo en linq a sql

public static IEnumerable<Category> GetChildren(this Table<Category> source, int? parentCategoryId) 
    { 
     var categories = from c in source where c.ParenCategoryId == parentCategoryId select c; 
     return categories; 
    } 

siguientes obras, pero si nulos utilizados directamente en el lugar de parentCategoryId

public static IEnumerable<Category> GetChildren(this Table<Category> source, int? parentCategoryId) 
    { 
     var categories = from c in source where c.ParenCategoryId == null select c; 
     return categories; 
    } 
+0

si (ParenCategoryID isEqualTo: NULL) y luego hacer lo que quiere. – vishiphone

Respuesta

8

Puede utilizar object.Equals, que coincidirá con el null valores también.

public static IEnumerable<Category> GetChildren(this Table<Category> source, int? parentCategoryId) 
{ 
    var categories = from c in source 
        where object.Equals(c.ParenCategoryId, parentCategoryId) 
        select c; 
    return categories; 
} 
+0

object.Equals se traducirá a sql? si es así, ¿cómo se verá la consulta? – Reniuz

+0

@Reniuz Sí, será: 'WHERE [t0]. [ParenCategoryId] IS NULL' – Magnus

+0

@Reniuz sí, y está optimizado por Linq a Sql según el valor de la variable que se puede nulos: http: //www.brentlamborn .com/post/LINQ-a-SQL-Null-check-in-Where-Clause.aspx # id_0d234c8d-7ed4-4b1e-97ba-fcc38bb4d277 –

0

Usted puede probar la siguiente comprobación

public static IEnumerable<Category> GetChildren(this Table<Category> source, int? parentCategoryId) 
{ 
    var categories = from c in source 
        where (parentCategoryId != null? c.ParenCategoryId == parentCategoryId : c.ParenCategoryId == null) 
        select c; 
    return categories; 
}