/// <summary> /// 把查询参数转换成表达式目录树 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="queryParam"></param> /// <returns></returns> public static Expression <Func <T, bool> > QueryParamToExpression <T>(this QueryParam queryParam) { ParameterExpression parameterExpression = Expression.Parameter(typeof(T), "a"); Expression member = EntityHelper <T> .GetMemberExpression(parameterExpression, queryParam.Field); if (member == null) { return(null); } //获取当前属性的类型 Type memberType = member.Type; object constantValue = null; //当前传入值的类型(实际查询的类型) Type valueType = memberType.IsNullableType() ? memberType.GetGenericArguments().First() : memberType; //int类型转double查询 if (valueType == typeof(int)) { valueType = typeof(double); } //把查询的值转换为对应的值 constantValue = DataUtils.ChangeType(queryParam.Value, valueType); Expression constant = Expression.Constant(constantValue, valueType); //把参数类型转换一下 constant = Expression.Convert(constant, memberType); Expression <Func <T, bool> > where = null; switch (queryParam.Logic) { //等于 case Common.Core.LogicEnum.Equal: return(Expression.Lambda <Func <T, bool> >(Expression.Equal(member, constant), parameterExpression)); //包含 右包含 左包含 case Common.Core.LogicEnum.Like: case Common.Core.LogicEnum.NoLike: case Common.Core.LogicEnum.LikeLeft: //右包含 case Common.Core.LogicEnum.LikeRight: //左包含 { var method = queryParam.Logic.ToMethod(); Expression mehtodCallExpression = Expression.Call(member, method, constant); // mehtodCallExpression.Not() where = Expression.Lambda <Func <T, bool> >(mehtodCallExpression, parameterExpression); if (queryParam.Logic == Common.Core.LogicEnum.NoLike) { where = where.Not(); } return(where); } //大于 case Common.Core.LogicEnum.GreaterThan: return(Expression.Lambda <Func <T, bool> >(Expression.GreaterThan(member, constant), parameterExpression)); //大于等于 case Common.Core.LogicEnum.GreaterThanOrEqual: return(Expression.Lambda <Func <T, bool> >(Expression.GreaterThanOrEqual(member, constant), parameterExpression)); //少于 case Common.Core.LogicEnum.LessThan: return(Expression.Lambda <Func <T, bool> >(Expression.LessThan(member, constant), parameterExpression)); //少于等于 case Common.Core.LogicEnum.LessThanOrEqual: return(Expression.Lambda <Func <T, bool> >(Expression.LessThanOrEqual(member, constant), parameterExpression)); // case Common.Core.LogicEnum.In: break; case Common.Core.LogicEnum.NotIn: break; //不等于 case Common.Core.LogicEnum.NoEqual: return(Expression.Lambda <Func <T, bool> >(Expression.NotEqual(member, constant), parameterExpression)); case Common.Core.LogicEnum.IsNullOrEmpty: break; case Common.Core.LogicEnum.IsNot: break; } return(null); }