2012-05-05 9 views
5

結果を得るために以下のlinqからsqlクエリを使用しようとしています。 nullがparentCategoryIdlinqのnull値をSQLにチェックする方法

の代わりに直接
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

チェックを試すことができ、あなたがやりたいです。 – vishiphone

答えて

8

を使用した場合はobject.Equalsを使用することができますしかし、それは作品はparentCategoryIdがnullとして

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

を通過したが、次の作品ならば、それはまた、null値に一致しますしません。

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はsqlに変換されますか?はいの場合はどのようにクエリが表示されますか? – Reniuz

+0

@Reniuzはい、それはなります: 'WHERE [t0]。[ParenCategoryId] IS NULL' – Magnus

+0

@ Reenuzはい、それはnull値の変数の値に応じてLinqからSqlに最適化されます:http://www.brentlamborn .com/post/LINQ-to-SQL-null-check-in-Where-Clause.aspx#id_0d234c8d-7ed4-4b1e-97ba-fcc38bb4d277 –

0

(ParenCategoryID isEqualTo:NULL)場合は、次の

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; 
} 
関連する問題