【发布时间】:2014-03-31 16:44:59
【问题描述】:
我正在尝试通过如下所示的 if 语句调整我的查询:
IQueryable articles = null;
if (User.IsInRole("Admin"))
{
articles = from s in db.Articles
select s;
}
if (User.IsInRole("Educator"))
{
articles = from s in db.Articles
where s.createdBy == WebSecurity.CurrentUserName
select s;
}
这似乎没有给我任何错误。但是,当我尝试使用 where 子句进行更多过滤时,它无法识别该术语。我知道 IQuerable 不支持它,但是有没有办法将“文章”最初设置为 null,然后用 if 语句设置它?
if (!String.IsNullOrEmpty(searchString))
{
articles = articles.Where(s => s.title.ToUpper().Contains(searchString.ToUpper())
|| s.content.ToUpper().Contains(searchString.ToUpper()));
}
switch (sortOrder)
{
case "name_desc":
articles = articles.OrderByDescending(s => s.title);
break;
case "Date":
articles = articles.OrderBy(s => s.dateCreated);
break;
case "date_desc":
articles = articles.OrderByDescending(s => s.dateCreated);
break;
case "rating_desc":
articles = articles.OrderByDescending(s => s.finalReview);
break;
case "Rating":
articles = articles.OrderBy(s => s.finalReview);
break;
case "Views":
articles = articles.OrderBy(s=>s.numViews);
break;
case "views_desc":
articles = articles.OrderByDescending(s => s.numViews);
break;
case "Educators":
articles = articles.OrderBy(s => s.educatorCRUD);
break;
case "educators_desc":
articles = articles.OrderByDescending(s => s.educatorCRUD);
break;
default:
articles = articles.OrderBy(s => s.title);
break;
}
我知道我可以在一个大的 if 语句中执行此操作 if(User.IsInRole("Admin")) 然后执行所有代码,然后将相同的代码复制并粘贴到不同的 if 语句中 (if(user.IsInRole("Educator )),但我认为这是多余且非常糟糕的编码实践。
干杯。
【问题讨论】: