예제 #1
0
        private static BinaryExpression GetExpression <T>
            (ParameterExpression param, PropertyFilter filter1, PropertyFilter filter2)
        {
            Expression bin1 = GetExpression <T>(param, filter1);
            Expression bin2 = GetExpression <T>(param, filter2);

            return(Expression.AndAlso(bin1, bin2));
        }
예제 #2
0
        private static Expression GetExpression <T>(ParameterExpression param, PropertyFilter filter)
        {
            MemberExpression   member   = Expression.Property(param, filter.PropertyName);
            ConstantExpression constant = Expression.Constant(filter.Value);

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

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

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

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

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

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

            case Operator.Like:
                return(Expression.Call(member, ContainsMethod, constant));

            case Operator.StartsWith:
                return(Expression.Call(member, StartsWithMethod, constant));

            case Operator.EndsWith:
                return(Expression.Call(member, EndsWithMethod, constant));
            }

            return(null);
        }