Csharp/C#教程:Linq不包含’Where’的定义分享


Linq不包含’Where’的定义

我正在尝试通过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不支持它,但有没有办法将“articles”设置为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)),但我认为这种冗余且非常糟糕的编码实践。

干杯。

您的articles变量使用非generics类型IQueryable ,它确实支持非常少。

你想要IQueryable来获得合适的 。 例如:

 IQueryable
articles; // Initialize as before

我个人会改变你如何初始化它:

上述就是C#学习教程:Linq不包含’Where’的定义分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 IQueryable
articles = db.Articles; if (User.IsInRole("Admin")) { // No change... } else if (User.IsInRole("Educator")) { articles = articles.Where(s => s.createdBy == WebSecurity.CurrentUserName); } else { // Throw an exception? What do you want to happen if they're neither an // educator nor an administrator? }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/951337.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐