2013-01-14 47 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命令更加不同。