本文代码转自这篇文章,先做下记录。

    public static class LambdaUtil<T>{/// <summary>/// lambda表达式:t=>true/// </summary>/// <returns></returns>public static Expression<Func<T, bool>> True(){return t => true;}/// <summary>/// lambda表达式:t=>false/// </summary>/// <returns></returns>public static Expression<Func<T, bool>> False(){return t => false;}/// <summary>/// lambda表达式:t=>t.propName/// 多用于order排序/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <typeparam name="TKey">返回类型</typeparam>/// <param name="propName">属性名</param>/// <returns></returns>private static Expression<Func<T, TKey>> Order<TKey>(string propName){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个属性MemberExpression property = Expression.Property(parameter, propName);// 生成lambda表达式return Expression.Lambda<Func<T, TKey>>(property, parameter);}/// <summary>/// lambda表达式:t=>t.propName==propValue/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> Equal(string propName, object propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue);// 创建一个相等比较ExpressionBinaryExpression binary = Expression.Equal(member, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(binary, parameter);}/// <summary>/// lambda表达式:t=>t.propName!=propValue/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> NotEqual(string propName, object propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue);// 创建一个不相等比较ExpressionBinaryExpression binary = Expression.NotEqual(member, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(binary, parameter);}/// <summary>/// lambda表达式:t=>t.propName&lt;propValue/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> LessThan(string propName, object propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue);// 创建一个不相等比较ExpressionBinaryExpression binary = Expression.LessThan(member, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(binary, parameter);}/// <summary>/// lambda表达式:t=>t.propName&lt;=propValue/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> LessThanOrEqual(string propName, object propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue);// 创建一个不相等比较ExpressionBinaryExpression binary = Expression.LessThanOrEqual(member, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(binary, parameter);}/// <summary>/// lambda表达式:t=>t.propName>propValue/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> GreaterThan(string propName, object propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue);// 创建一个不相等比较ExpressionBinaryExpression binary = Expression.GreaterThan(member, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(binary, parameter);}/// <summary>/// lambda表达式:t=>t.propName>=propValue/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> GreaterThanOrEqual(string propName, object propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue);// 创建一个不相等比较ExpressionBinaryExpression binary = Expression.GreaterThanOrEqual(member, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(binary, parameter);}/// <summary>/// lambda表达式:t=>{t.contains(propvalue1) ||...||t.contains(propvalueN)}/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValues">属性值数组</param>/// <returns></returns>public static Expression<Func<T, bool>> In(string propName, string[] propValues){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t"); // left// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数Expression constant = Expression.Constant(false);// 创建一个方法MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });foreach (string item in propValues){// 创建一个带参数方法ExpressionMethodCallExpression methodCall = Expression.Call(member, method, Expression.Constant(item)); // right// 连接参数方法constant = Expression.Or(methodCall, constant);}// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(constant, new ParameterExpression[] { parameter });}/// <summary>/// lambda表达式:t=>{!(t.contains(propvalue1) ||...||t.contains(propvalueN))}/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValues">属性值数组</param>/// <returns></returns>public static Expression<Func<T, bool>> NotIn(string propName, string[] propValues){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数Expression constant = Expression.Constant(false);// 创建一个方法MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });foreach (string item in propValues){// 创建一个带参数方法ExpressionMethodCallExpression methodCall = Expression.Call(member, method, Expression.Constant(item)); // right// 连接参数方法constant = Expression.Or(methodCall, constant);}// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(Expression.Not(constant), new ParameterExpression[] { parameter });}/// <summary>/// lambda表达式:t=>t.propName.Contains(propValue)/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> Contains(string propName, string propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue, typeof(string));// 创建一个方法MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });// 创建一个带参数方法ExpressionMethodCallExpression methodCall = Expression.Call(member, method, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(methodCall, parameter);}/// <summary>/// lambda表达式:t=>t.propName.Contains(propValue)/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> StartWith(string propName, string propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue, typeof(string));// 创建一个方法MethodInfo method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });// 创建一个带参数方法ExpressionMethodCallExpression methodCall = Expression.Call(member, method, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(methodCall, parameter);}/// <summary>/// lambda表达式:t=>t.propName.Contains(propValue)/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> EndsWith(string propName, string propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue, typeof(string));// 创建一个方法MethodInfo method = typeof(string).GetMethod("EndsWith", new[] { typeof(string) });// 创建一个带参数方法ExpressionMethodCallExpression methodCall = Expression.Call(member, method, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(methodCall, parameter);}/// <summary>/// lambda表达式:!(t=>t.propName.Contains(propValue))/// 多用于where条件/// </summary>/// <typeparam name="T">参数类型</typeparam>/// <param name="propName">属性名称</param>/// <param name="propValue">属性值</param>/// <returns></returns>public static Expression<Func<T, bool>> NotContains(string propName, string propValue){// 创建节点参数tParameterExpression parameter = Expression.Parameter(typeof(T), "t");// 创建一个成员(字段/属性)MemberExpression member = Expression.PropertyOrField(parameter, propName);// 创建一个常数ConstantExpression constant = Expression.Constant(propValue, typeof(string));// 创建一个方法MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });// 创建一个带参数方法ExpressionMethodCallExpression methodCall = Expression.Call(member, method, constant);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(Expression.Not(methodCall), parameter);}/// <summary>/// lambda表达式:t=>{left and right}/// 多用于where条件/// </summary>/// <param name="left">左侧条件</param>/// <param name="right">右侧条件</param>/// <returns></returns>public static Expression<Func<T, bool>> And(Expression<Func<T, bool>> left, Expression<Func<T, bool>> right){// 创建参数表达式InvocationExpression invocation = Expression.Invoke(right, left.Parameters.Cast<Expression>());// 创建and运算BinaryExpression binary = Expression.And(left.Body, invocation);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(binary, left.Parameters);}/// <summary>/// lambda表达式:t=>{left or right}/// 多用于where条件/// </summary>/// <param name="left">左侧条件</param>/// <param name="right">右侧条件</param>/// <returns></returns>public static Expression<Func<T, bool>> Or(Expression<Func<T, bool>> left, Expression<Func<T, bool>> right){// 创建参数表达式InvocationExpression invocation = Expression.Invoke(right, left.Parameters.Cast<Expression>());// 创建or运算BinaryExpression binary = Expression.Or(left.Body, invocation);// 生成lambda表达式return Expression.Lambda<Func<T, bool>>(binary, left.Parameters);}}

C#中Lambda表达式动态拼接生成工具类相关推荐

  1. Java中Lambda表达式和stream的使用

    Java中Lambda表达式和stream的使用 转自 [*https://www.cnblogs.com/franson-2016/p/5593080.html*] 简介 (译者注:虽然看着很先进, ...

  2. Java中Lambda表达式的使用

    目录 1 简介 2  Lambda表达式的组成 2.1  Lambda表达式的函数式接口 2.2 对接口的要求 3 Lambda使用 3.1 基本使用 3.2 使用Lambdas和Streams 4 ...

  3. Java8中Lambda表达式的10个例子

    Java8中Lambda表达式的10个例子  例1 用Lambda表达式实现Runnable接口 Java代码   //Before Java 8: new Thread(new Runnable() ...

  4. python lambda表达式_Python中lambda表达式

    Python中lambda表达式 1.lambda的应⽤用场景 如果一个函数有一个返回值,并且只有一句代码,可以使用 lambda简化. 2. lambda语法 lambda 参数列列表 : 表达式 ...

  5. Java8 Collections.sort()及Arrays.sort()中Lambda表达式及增强版Comparator的使用

    摘要:本文主要介绍Java8 中Arrays.sort()及Collections.sort()中Lambda表达式及增强版Comparator的使用. 不废话直接上代码 import com.goo ...

  6. lambda表达式python啥意思_Python中lambda表达式是什么

    Python中lambda表达式是什么 发布时间:2020-09-24 09:56:07 来源:亿速云 阅读:83 作者:Leah 本篇文章给大家分享的是有关Python中lambda表达式是什么,小 ...

  7. php有lambda表达式吗,Python中lambda表达式的简单介绍(附示例)

    本篇文章给大家带来的内容是关于Python中lambda表达式的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一:匿名函数的定义 lambda parameter ...

  8. 变量不合法的表达式JAVA_Java8中lambda表达式的语法,别人都会的,你还不会吗?「一」...

    函数式编程 函数式编程是一种编程方式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是λ演算(lambda calculus),λ演算的函数可以接受函数当作输入(参数)和输出(返回值). 函数式 ...

  9. lambda函数if_Python3中lambda表达式与函数式编程讲解

    今天小编就为大家分享一篇关于Python3中lambda表达式与函数式编程讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 简单来说,编程中提到的 lam ...

最新文章

  1. utf-8编码的中文注释 在 sourceinsight 显示乱码的解决方法---utf8 转gb2312插件
  2. java面试题3(java基础)
  3. Hadoop 2.x 完全分布式HA集群环境搭建
  4. 怎么计算网站高峰期并发量和所需的带宽?
  5. 剑指offer 替换空格
  6. 【足迹C++primer】52、,转换和继承虚函数
  7. Python二级笔记(3)
  8. C++中的引用与指针的区别
  9. 一篇文章带你读懂 MySQL 和 InnoDB
  10. Vue3学习笔记01:使用NPM方法安装Vue3
  11. webpack——一站到底一
  12. 关于分卷压缩文件打不开的问题
  13. 数学建模题目和模型汇总(2000-2019 国赛本科组)
  14. SURF算法python实现
  15. mysql规格单位转化_存储单位的换算(KB, MB, GB)
  16. excel求方差和标准差的函数_excel标准差函数是什么?怎么计算?
  17. 抽象类的作用是什么?
  18. 【爬虫】每天定时爬取网页小故事并发送至指定邮箱
  19. 2019年,微信多开软件排行榜
  20. 11. 盛最多水的容器(java实现)--2种解法(左右夹逼,暴力)LeetCode

热门文章

  1. SQLServer中的死锁的介绍
  2. (Kali)BackTrack-linux安全***测试系统盘
  3. Java_BigInteger
  4. nagios整合cacti2011版(五)
  5. Mybatis中resultMap
  6. 动态改变_Excel中如何动态改变可编辑区域?
  7. python遥感数据有偿处理_利用python读写tiff遥感影像数据
  8. 会计行业被计算机取代马云,会计人:为什么我神烦“人工智能取代说”?
  9. php mvc 逻辑层在哪,mvc的业务逻辑应该放哪里?
  10. r语言简介_R语言简介