2010-03-22 40 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爲空。 (不過,在大多數情況下,這可能是微不足道的)。