设为首页 加入收藏

TOP

表达式树的说明与运用(一)
2019-09-20 11:46:05 】 浏览:114
Tags:表达式 说明 运用

说明: 在我们日常代码开发中很多的地方都用到了Lambda表达式进行过滤操作,我们很多优秀的ORM也是使用表达式来进行数据的查询。但是对于一些复杂的过 滤单纯的使用Lambda已经不能够解决问题了那么就需要表达式树来进行条件的一个拼接。 

下面介绍一个本人写的一个工具类有助于项目中更好的使用:

  1   public static class ExpressionTreeTools
  2     {
  3         /// <summary>
  4         /// 相当于&&操作
  5         /// ——just0ne
  6         /// </summary>
  7         /// <param name="thisFilter">已生成的过滤条件</param>
  8         /// <param name="otherFilter">未生成的过滤条件</param>
  9         /// <returns>新的过滤</returns>
 10         public static Expression And(this Expression thisFilter, Expression otherFilter)
 11         {
 12             return Expression.AndAlso(thisFilter, otherFilter);
 13         }
 14         /// <summary>
 15         /// 相当于||操作
 16         /// ——just0ne
 17         /// </summary>
 18         /// <param name="thisFilter">已生成的过滤条件</param>
 19         /// <param name="otherFilter">未生成的过滤条件</param>
 20         /// <returns>新的过滤</returns>
 21         public static Expression Or(this Expression thisFilter, Expression otherFilter)
 22         {
 23             return Expression.OrElse(thisFilter, otherFilter);
 24         }
 25         /// <summary>
 26         /// 相当于==操作
 27         /// ——just0ne
 28         /// </summary>
 29         /// <param name="thisParameterExpression">查询对象</param>
 30         /// <param name="propertieName">属性名称</param>
 31         /// <param name="propertieva lue">属性值</param>
 32         /// <returns>新的过滤</returns>
 33         public static Expression GotoEqual(this ParameterExpression thisParameterExpression, string propertieName, object propertieva lue)
 34         {
 35             return Expression.Equal(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieva lue));
 36         }
 37         /// <summary>
 38         /// 相当于>=操作
 39         /// ——just0ne
 40         /// </summary>
 41         /// <param name="thisParameterExpression">查询对象</param>
 42         /// <param name="propertieName">属性名称</param>
 43         /// <param name="propertieva lue">属性值</param>
 44         /// <returns>新的过滤</returns>
 45         public static Expression GotoGreaterThanOrEqual<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieva lue)
 46         {
 47             //大于或等于
 48             return Expression.GreaterThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieva lue, typeof(T)));
 49         }
 50         /// <summary>
 51         /// 相当于小于等于操作
 52         /// ——just0ne
 53         /// </summary>
 54         /// <param name="thisParameterExpression">查询对象</param>
 55         /// <param name="propertieName">属性名称</param>
 56         /// <param name="propertieva lue">属性值</param>
 57         /// <returns>新的过滤</returns>
 58         public static Expression GotoLessThanOrEqual<T>(this ParameterExpression thisParameterExpression, string propertieName, object propertieva lue)
 59         {
 60             //小于或等于
 61             return Expression.LessThanOrEqual(Expression.Property(thisParameterExpression, propertieName), Expression.Constant(propertieva lue, typeof(T)));
 62         }
 63         /// <summary>
 64         /// 相当于>操作
 65         /// ——just0ne
 66         /// </summary>
 67         /// <param name="thisParameterExpression">查询对
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇设计模式-责任链设计模式 下一篇[3]尝试用Unity3d制作一个王者荣..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目