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)); }
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); }