2010-03-22 5 views
2

i have codelinq restructuration de code null

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

il est possible de le faire d'une seule ligne comme retour _dataContext.Files.Where (f => == f.Menu.MenuId menuId) .ToList() ?

Répondre

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

Il suffit d'utiliser l'opérateur "OU logique" (||):

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

Bien sûr, vous pouvez mettre le chèque nul dans la fonction lambda:

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

Cependant, si la performance est tout souci alors votre version originale est préférable, car cette version appelait inutilement .Where() lorsque menuId est nul. (Ce serait probablement une différence négligeable dans la plupart des cas, cependant.)