linq нулевой код рефакторинга - PullRequest
2 голосов
/ 22 марта 2010

у меня есть код

public List<Files> List(int? menuId)
{
    if (menuId == null)
    {
        return _dataContext.Files.ToList();
    }
    else
    {
        return _dataContext.Files.Where(f => f.Menu.MenuId == menuId).ToList();
    }
}

возможно ли сделать его только одной строкой, например return _dataContext.Files.Where (f => f.Menu.MenuId == menuId) .ToList ();?

Ответы [ 3 ]

1 голос
/ 22 марта 2010
public List<Files> List(int? menuId) {
    return _dataContext.Files.Where(f => menuId == null || f.Menu.MenuId == menuId).ToList();
}
0 голосов
/ 22 марта 2010

Конечно, вы можете поставить нулевую проверку внутри лямбда-функции:

return _dataContext.Files.Where(f => menuId == null || f.Menu.MenuId == menuId.Value).ToList();

Однако, если производительность вызывает какое-либо беспокойство, тогда ваша исходная версия предпочтительнее, потому что эта версия будет без необходимости вызывать .Where(), когда menuId будет нулевым. (Вероятно, в большинстве случаев это будет незначительная разница.)

0 голосов
/ 22 марта 2010

Просто используйте оператор «логическое ИЛИ» (||):

public List<Files> List(int? menuId)
{
    return _dataContext.Files.Where(f => !menuId.HasValue || f.Menu.MenuId == menuId).ToList();
}
...