2013-01-14 51 views
0

我想知道是否有這樣做的更有效的方式就是我需要如下進行:LINQ的最有效的方式

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) 

我在想,如果有隻使用一個

 dbContext.Search1(searchField, searchString, searchOper) 
的一個聰明的辦法

與我正在使用的2然後有條件地做一個Where子句?

回答

5

是的,這聽起來像你想要的東西,如:

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

請注意,這並不能真正改變效率,但它確實影響了可讀性。

5

我想你想是這樣的:

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

或者:

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); 

是比剛剛預設置i=1 or 2您的具體情況不太整齊,但更靈活一般應在兩個不同的Where命令更加不同。