Linq-to-SQL, используя int?с нулевым значением - PullRequest
0 голосов
/ 18 января 2011

У меня возникли проблемы с запросом 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 Ответ

3 голосов
/ 18 января 2011

Вы можете попробовать использовать следующий код:

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.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...