linq 动态拼接where条件 类似 T_SQL And Or
废话不多说,直接上代码 复制可
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相关推荐
- oracle数据库动态拼接查询条件解决方案
在项目中遇到需要动态拼接查询条件的需求,现将解决方案列于下. 一. select * from table t where ('$(param)' is null or t.filed = '$(pa ...
- 用PredicateBuilder实现Linq动态拼接查询
在使用Linq查询的时候,特别是如果你在使用Entiry Framwork,有时会遇到动态查询的情况(客户的查询条件是不固定的拼接查询). 我们能想到的第一方案应该是拼接SQL,的确这样是可以达到我们 ...
- BIRT 中如何根据参数动态拼接 SQL
BIRT可以使用sql query来创建数据集,通过在报表中设置参数(Parameter)来传递客户端的用户输入,同时可以设置Dataset参数并且与报表参数关联(这两个参数是不同的),这样可以将客户 ...
- LINQ to SQL 运行时动态构建查询条件
原文地址:http://msdn.microsoft.com/zh-cn/dd567295.aspx 在进行数据查询时,经常碰到需要动态构建查询条件.使用LINQ实现这个需求可能会比以前拼接SQL语句 ...
- ExpressionFuncT, bool拼接查询条件
由于项目中经常要用到类似db.students.where多条件查询,因此需要拼接查询条件. 网上搜索大部分出自 Dynamically Composing Expression Predicates ...
- php如何拼接变量名,php动态拼接变量名,可变变量,动态变量,使用花括号,使用两个$符...
php动态拼接变量名,可变变量,动态变量,使用花括号,使用两个$符 方式一:使用花括号,前缀部分不需要用单引号 $nums10 = 100; $xxx*${bcount.$nums10}['m54'] ...
- vue 动态拼接style_vue style width a href动态拼接问题的解决
style width 这个问题 折磨了我一个上午了 好惭愧 因为项目涉及到 进度条 所以必须用行内样式 style 用过vue的都知道 vue中style的用法 大众用法 :style=" ...
- 代码中(C#)支持动态拼接SQL的参数化查询
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D ...
- mybatis动态SQL多条件查询1 - if 标签
Mybatis框架的动态SQL技术是一种根据特定条件动态拼接SQL语句的过程.它的存在是为了解决拼接SQL语句字符串的痛点问题.创建新的Mapper接口和新的mapper映射文件. 目录 1.创建Dy ...
最新文章
- 程序员如何才能提高自己?通过一次重构代码讲解自己的感受【有代码比较】...
- Django之路——6 Django的模型层(一)
- 【Irrlicht鬼火引擎】 安装配置Irrlicht鬼火引擎
- Faster-RCNN训练时遇到的问题
- 多继承-概念、语法和基本演练
- 生成模型和判别模型_生成模型和判别模型简介
- Remastersys制作自己的Linux发行版
- shell test
- less与SASS学习心得
- 2.熟悉LINUX的基本操作
- Linux下setsockopt函数返回-1,errno=22
- React+Webpack+Antd+Babel 兼容低版本浏览器(下)
- MATLAB 点运算与除法
- sql实现根据身份证计算年龄
- div实现上下左右居中的方法
- [QUANTAXIS量化分析]滚动复利策略
- HTML空格符号 nbsp; ensp; emsp; 介绍以及实现中文对齐的方法
- pywin32下载安装
- 从pcap文件中解析网络数据包
- Thinkpad使用傲游浏览器的时候,无法滚动页面怎么办?
热门文章
- LeetCode021 Merge Two Sorted Listss C语言
- Hadoop集群部署权限总结
- 使用Qt设计师文件的3种方式
- MBG配置详解及最佳实践
- Spring ROO初体验
- 每天学一点flash(11) as3.0 与asp 通信 (1)
- [导入]从函数RND的使用想到的!
- 安卓手机充电慢_苹果手机充电慢,耗电却很快?教你几个窍门,充得快电量更耐用...
- MATLAB学习笔记(九)
- node本地连接服务器的数据库_Linux本地连接阿里云服务器,以及下载node.js配置环境...