我有一个类型模型,其中 ParentID 字段为 int?数据类型。 我正在努力实现这个目标:
WHERE
ISNULL(ParentID,0) == ParentCategoryID
...在linq中但似乎在挣扎,因为它告诉我我不能将 ?? 应用于ParentID,因为它是一个可以为空的整数。
IList<Category> ChildCategories = AllCategoriesAsList
.Where(c => c.ParentID ?? 0 == ParentCategoryID)
.ToList();
我有点卡住了。
答案 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等价物同样也可以避免合并问题。