2012-01-09 38 views
2

我有一個類別模型,它有一個ParentID字段int?數據類型。 我試圖做到這一點:Linq lambda null-coalescing一個空值int

WHERE 
    ISNULL(ParentID,0) == ParentCategoryID 

...在LINQ,但似乎是掙扎的,因爲它告訴我,我不能申請給ParentID,因爲它是一個可爲空的整數。

IList<Category> ChildCategories = AllCategoriesAsList 
    .Where(c => c.ParentID ?? 0 == ParentCategoryID) 
    .ToList(); 

我有點卡住了。

回答

4

像這樣的事情可以做

IList<Category> ChildCategories = AllCategoriesAsList 
    .Where(c => (c.ParentID.HasValue ? c.ParentID.Value : 0) == ParentCategoryID) 
    .ToList(); 
+0

我甚至不知道'HasValue'。太棒了。謝謝亞歷克斯 – 2012-01-09 11:29:17

+0

@歡迎您歡迎 – Alex 2012-01-09 12:38:33

1

不是真的直接回答你的問題,但請注意,使用ISNULL() in a Where filter會導致表/索引掃描

WHERE  ISNULL(ParentID,0) == ParentCategoryID 

可以改寫爲

WHERE (ParentId is NULL AND ParentCategoryId = 0) OR (ParentId = ParentCategoryId) 

一般應該有更好的表現。 LINQ等價物同樣可以避免合併問題。

+0

我會採取這種機載爲未來的查詢。謝謝nonnb – 2012-01-09 11:30:20