예제 #1
0
        public static Expression GetExpression <T>(ParameterExpression param, ExpressionFilter filter, Type propertyType)
        {
            MemberExpression   member   = Expression.Property(param, filter.ActualPropertyName);
            ConstantExpression constant = Expression.Constant(filter.ActualValue, propertyType);
            string             s        = string.Empty;

            switch (filter.Comparison)
            {
            case ComparisonOperator.Equal:
                return(Expression.Equal(member, constant));

            case ComparisonOperator.GreaterThan:
                return(Expression.GreaterThan(member, constant));

            case ComparisonOperator.GreaterThanOrEqual:
                return(Expression.GreaterThanOrEqual(member, constant));

            case ComparisonOperator.LessThan:
                return(Expression.LessThan(member, constant));

            case ComparisonOperator.LessThanOrEqual:
                return(Expression.LessThanOrEqual(member, constant));

            case ComparisonOperator.NotEqual:
                return(Expression.NotEqual(member, constant));

            case ComparisonOperator.Contains:
                return(Expression.Call(ToLowerMember(member), containsMethod, constant));

            case ComparisonOperator.StartsWith:
                return(Expression.Call(member, startsWithMethod, constant));

            case ComparisonOperator.EndsWith:
                return(Expression.Call(member, endsWithMethod, constant));

            case ComparisonOperator.In:
                return(constant.ListContains(member));

            default:
                return(null);
            }
        }