Linq lambda null -coalescing一个可空的int

时间:2012-01-09 11:09:07

标签: asp.net-mvc entity-framework linq-to-sql

我有一个类型模型,其中 ParentID 字段为 int?数据类型。 我正在努力实现这个目标:

WHERE 
    ISNULL(ParentID,0) == ParentCategoryID

...在linq中但似乎在挣扎,因为它告诉我我不能将 ?? 应用于ParentID,因为它是一个可以为空的整数。

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

我有点卡住了。

2 个答案:

答案 0 :(得分:4)

这样的事情可以做到

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

答案 1 :(得分:1)

没有直接回答您的问题,但请注意使用ISNULL() in a Where filter可能导致表/索引扫描

WHERE      ISNULL(ParentID,0) == ParentCategoryID

可以改写为

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

通常应该有更好的表现。 LINQ等价物同样也可以避免合并问题。