2010-03-22 52 views
2

我有代码LINQ空重构代码

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

是它能够使得只有一条线像返回_dataContext.Files.Where(F => f.Menu.MenuId ==菜单Id).ToList() ;?

回答

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

只需使用 “逻辑或” 运算符(||):

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

当然,你可以把空校验的lambda函数内部:

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

然而,如果性能是任何问题,那么你的原始版本是可取的,因为这个版本会不必要地调用.Where()当menuId为空。 (不过,在大多数情况下,这可能是微不足道的)。