说明: 在我们日常代码开发中很多的地方都用到了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">查询对