架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 23909|回复: 0

[资料] LINQ 多条件查询 where 条件组建

[复制链接]
发表于 2016-7-12 17:27:13 | 显示全部楼层 |阅读模式

1.新建一个静态类

  1.     public static class PredicateBuilder
  2.     {
  3.         public static Expression<Func<T, bool>> True<T>()
  4.         { return f => true; }
  5.         public static Expression<Func<T, bool>> False<T>() { return f => false; }

  6.         public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
  7.                                                             Expression<Func<T, bool>> expr2)
  8.         {
  9.             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
  10.             return Expression.Lambda<Func<T, bool>>
  11.                   (Expression.Or(expr1.Body, invokedExpr), expr1.Parameters);
  12.         }

  13.         public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
  14.                                                              Expression<Func<T, bool>> expr2)
  15.         {
  16.             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
  17.             return Expression.Lambda<Func<T, bool>>
  18.                   (Expression.And(expr1.Body, invokedExpr), expr1.Parameters);
  19.         }
  20.     }
复制代码


2.条件建立和调用
  1.                 Expression<Func<View_UserAndRole, bool>> ExpWhere = PredicateBuilder.True<View_UserAndRole>();
  2.                 if (!string.IsNullOrEmpty(Request.Params["RoleID"]))
  3.                 {
  4.                     ExpWhere = ExpWhere.And(p => Convert.ToInt32(p.RoleID) == Convert.ToInt32(Request.Params["RoleID"].ToString()));
  5.                 }
  6.                 if (!string.IsNullOrEmpty(Request.Params["UName"]))
  7.                 {
  8.                     ExpWhere = ExpWhere.And(p => p.UName.Contains(Request.Params["UName"].ToString()));
  9.                 }
  10.                 if (!string.IsNullOrEmpty(Request.Params["IsLock"]))
  11.                 {
  12.                     ExpWhere = ExpWhere.And(p => Convert.ToInt32(p.IsLock) == Convert.ToInt32(Request.Params["IsLock"].ToString()));
  13.                 }
  14.                 if (!string.IsNullOrEmpty(Request.Params["LoginState"]))
  15.                 {
  16.                     ExpWhere = ExpWhere.And(p => p.LoginState == Convert.ToInt32(Request.Params["LoginState"]));
  17.                 }
  18.                 var UserList = mql.LinQObj.View_UserAndRole.Where(ExpWhere);
复制代码






上一篇:sql如何查某个表某个字段的数据类型?
下一篇:ConcurrentDictionary对于新增及更新的支持
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-7-18 14:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表