我遇到了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();
答案 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
。
希望这有帮助。