2013-01-14 5 views
0

Je me demandais s'il y a un moyen plus efficace de faire ce que je besoin fait ci-dessous:Linq façon la plus efficace

return HttpContext.Current.User.IsInRole("Admin") 
    ? dbContext.Prog_Search1(searchField, searchString, searchOper).Where(a => a.Id == 2)  
    : dbContext.Prog_Search1(searchField, searchString, searchOper).Where(a => a.Id == 1) 

Je me demandais s'il y a une façon intelligente d'utiliser une seule

 dbContext.Search1(searchField, searchString, searchOper) 

par rapport aux 2 que j'utilise et ensuite faire une clause Where conditionnellement?

Répondre

5

Oui, il semble que vous voulez quelque chose comme:

int targetId = HttpContext.Current.User.IsInRole("Admin") ? 2 : 1; 
return dbContext.Prog_Search1(searchField, searchString, searchOper) 
       .Where(a => a.Id == targetId); 

Notez que cela ne change pas vraiment l'efficacité , mais il affecte la lisibilité.

5

Je pense que vous voulez quelque chose comme ceci:

var id = HttpContext.Current.User.IsInRole("Admin") ? 2 : 1 
return dbContext.Prog_Search1(searchField, searchString, searchOper) 
       .Where(a => a.Id == id); 
1

Autre possibilité:

var srch = dbContext.Prog_Search1(searchField, searchString, searchOper); 
return HttpContext.Current.User.IsInRole("Admin") 
    ? srch.Where(a => a.Id == 2)  
    : srch.Where(a => a.Id == 1); 

est moins bien rangé dans votre cas particulier que juste avant la mise en i=1 or 2, mais plus souple devrait généralement les deux différents Les commandes Where sont plus différentes.

Questions connexes