Linq-to-SQL使用int?具有空值

时间:2011-01-18 12:49:25

标签: linq-to-sql

我遇到了Linq-to-SQL查询的一些问题

现在,如果我运行此请求,一切运行正常,我得到了正确的结果(2行)。

return _repository.GetMenus()
                .Where(x => x.ParentId == null && x.WikiId == 1)
                .ToList();

但是,如果我执行以下操作,我只会得到一个空列表。

var menu = new WikiMenu();
menu.ParentId = null;
return  _repository.GetMenus()
                   .Where(x => x.ParentId == menu.ParentId && x.WikiId == 1)
                   .ToList();

但如果menu.ParentId是其他任何东西,那么null就可以正常工作了。

这是模型WikiMenu

public class WikiMenu
{
    public int? Id { get; set; }
    public int WikiId { get; set; }
    public int PageId { get; set; }
    public string Title { get; set; }
    public int Order { get; set; }
    public int? ParentId { get; set; }
    public List<WikiMenu> SubMenu { get; set; }
}

我该如何解决这个问题?

到目前为止,我已经完成了这个小黑客

if(menu.ParentId == null)
     return _repository.GetMenus()
                       .Where(x => x.ParentId == null && x.WikiId == site.Id)
                       .ToList();
else
     return _repository.GetMenus()
                       .Where(x => x.ParentId == menu.ParentId && x.WikiId == site.Id)
                       .ToList();

1 个答案:

答案 0 :(得分:3)

您可以尝试使用以下代码:

return _repository.GetMenus().  
    Where(x => object.Equals(x.ParentId, menu.ParentId) && x.WikiId == 1).ToList();

此代码片段将强制Linq2SQL生成类似的内容 WHERE [table0].[parentId] IS NULL而不是WHERE [table0].[parentId] == NULL

希望这有帮助。