废话不多说,直接上代码  复制可

 1    internal class NewExpressionVisitor : ExpressionVisitor
 2     {
 3         public ParameterExpression _NewParameter { get; private set; }
 4         public NewExpressionVisitor(ParameterExpression param)
 5         {
 6             this._NewParameter = param;
 7         }
 8         public Expression Replace(Expression exp)
 9         {
10             return this.Visit(exp);
11         }
12         protected override Expression VisitParameter(ParameterExpression node)
13         {
14             return this._NewParameter;
15         }
16     }
17     public static class ExpressionExt
18     {
19         /// <summary>
20         /// 合并表达式 expr1 AND expr2
21         /// </summary>
22         /// <typeparam name="T"></typeparam>
23         /// <param name="expr1"></param>
24         /// <param name="expr2"></param>
25         /// <returns></returns>
26         public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
27         {
28             if (expr1 == null)
29                 return expr2;
30             else if (expr2 == null)
31                 return expr1;
32
33             //return Expression.Lambda<Func<T, bool>>(Expression.AndAlso(expr1.Body, expr2.Body), expr1.Parameters);
34             ParameterExpression newParameter = Expression.Parameter(typeof(T), "c");
35             NewExpressionVisitor visitor = new NewExpressionVisitor(newParameter);
36
37             var left = visitor.Replace(expr1.Body);
38             var right = visitor.Replace(expr2.Body);
39             var body = Expression.And(left, right);
40             return Expression.Lambda<Func<T, bool>>(body, newParameter);
41
42         }
43         /// <summary>
44         /// 合并表达式 expr1 or expr2
45         /// </summary>
46         /// <typeparam name="T"></typeparam>
47         /// <param name="expr1"></param>
48         /// <param name="expr2"></param>
49         /// <returns></returns>
50         public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2)
51         {
52             if (expr1 == null)
53                 return expr2;
54             else if (expr2 == null)
55                 return expr1;
56
57             ParameterExpression newParameter = Expression.Parameter(typeof(T), "c");
58             NewExpressionVisitor visitor = new NewExpressionVisitor(newParameter);
59
60             var left = visitor.Replace(expr1.Body);
61             var right = visitor.Replace(expr2.Body);
62             var body = Expression.Or(left, right);
63             return Expression.Lambda<Func<T, bool>>(body, newParameter);
64         }
65         public static Expression<Func<T, bool>> Not<T>(this Expression<Func<T, bool>> expr)
66         {
67             if (expr == null)
68                 return null;
69
70             var candidateExpr = expr.Parameters[0];
71             var body = Expression.Not(expr.Body);
72
73             return Expression.Lambda<Func<T, bool>>(body, candidateExpr);
74         }
75     }

View Code

调用时

express= express.And(a => ids.Contains(id));

express= express.Or(a => ids.Contains(id));

转载于:https://www.cnblogs.com/jcdd-4041/p/10291988.html

linq 动态拼接where条件 类似 T_SQL And Or相关推荐

  1. oracle数据库动态拼接查询条件解决方案

    在项目中遇到需要动态拼接查询条件的需求,现将解决方案列于下. 一. select * from table t where ('$(param)' is null or t.filed = '$(pa ...

  2. 用PredicateBuilder实现Linq动态拼接查询

    在使用Linq查询的时候,特别是如果你在使用Entiry Framwork,有时会遇到动态查询的情况(客户的查询条件是不固定的拼接查询). 我们能想到的第一方案应该是拼接SQL,的确这样是可以达到我们 ...

  3. BIRT 中如何根据参数动态拼接 SQL

    BIRT可以使用sql query来创建数据集,通过在报表中设置参数(Parameter)来传递客户端的用户输入,同时可以设置Dataset参数并且与报表参数关联(这两个参数是不同的),这样可以将客户 ...

  4. LINQ to SQL 运行时动态构建查询条件

    原文地址:http://msdn.microsoft.com/zh-cn/dd567295.aspx 在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语句 ...

  5. ExpressionFuncT, bool拼接查询条件

    由于项目中经常要用到类似db.students.where多条件查询,因此需要拼接查询条件. 网上搜索大部分出自 Dynamically Composing Expression Predicates ...

  6. php如何拼接变量名,php动态拼接变量名,可变变量,动态变量,使用花括号,使用两个$符...

    php动态拼接变量名,可变变量,动态变量,使用花括号,使用两个$符 方式一:使用花括号,前缀部分不需要用单引号 $nums10 = 100; $xxx*${bcount.$nums10}['m54'] ...

  7. vue 动态拼接style_vue style width a href动态拼接问题的解决

    style width 这个问题 折磨了我一个上午了 好惭愧 因为项目涉及到 进度条 所以必须用行内样式 style 用过vue的都知道 vue中style的用法 大众用法 :style=" ...

  8. 代码中(C#)支持动态拼接SQL的参数化查询

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D ...

  9. mybatis动态SQL多条件查询1 - if 标签

    Mybatis框架的动态SQL技术是一种根据特定条件动态拼接SQL语句的过程.它的存在是为了解决拼接SQL语句字符串的痛点问题.创建新的Mapper接口和新的mapper映射文件. 目录 1.创建Dy ...

最新文章

  1. 程序员如何才能提高自己?通过一次重构代码讲解自己的感受【有代码比较】...
  2. Django之路——6 Django的模型层(一)
  3. 【Irrlicht鬼火引擎】 安装配置Irrlicht鬼火引擎
  4. Faster-RCNN训练时遇到的问题
  5. 多继承-概念、语法和基本演练
  6. 生成模型和判别模型_生成模型和判别模型简介
  7. Remastersys制作自己的Linux发行版
  8. shell test
  9. less与SASS学习心得
  10. 2.熟悉LINUX的基本操作
  11. Linux下setsockopt函数返回-1,errno=22
  12. React+Webpack+Antd+Babel 兼容低版本浏览器(下)
  13. MATLAB 点运算与除法
  14. sql实现根据身份证计算年龄
  15. div实现上下左右居中的方法
  16. [QUANTAXIS量化分析]滚动复利策略
  17. HTML空格符号 nbsp; ensp; emsp; 介绍以及实现中文对齐的方法
  18. pywin32下载安装
  19. 从pcap文件中解析网络数据包
  20. Thinkpad使用傲游浏览器的时候,无法滚动页面怎么办?

热门文章

  1. LeetCode021 Merge Two Sorted Listss C语言
  2. Hadoop集群部署权限总结
  3. 使用Qt设计师文件的3种方式
  4. MBG配置详解及最佳实践
  5. Spring ROO初体验
  6. 每天学一点flash(11) as3.0 与asp 通信 (1)
  7. [导入]从函数RND的使用想到的!
  8. 安卓手机充电慢_苹果手机充电慢,耗电却很快?教你几个窍门,充得快电量更耐用...
  9. MATLAB学习笔记(九)
  10. node本地连接服务器的数据库_Linux本地连接阿里云服务器,以及下载node.js配置环境...