Пример #1
0
 protected override Expression CompareValue(Expression left, Expression right, Type type)
 {
     if (type != typeof(string))
     {
         throw FilterErrors.TheOperatorCanOnlyUserForStringType(this.Operator);
     }
     return(Expression.Call(left, Method.Value, right));
 }
Пример #2
0
        protected override Expression CompareValue(Expression left, Expression right, Type type)
        {
            var dataType       = Nullable.GetUnderlyingType(type) ?? type;
            var comparableType = typeof(IComparable <>).MakeGenericType(dataType);

            if (!comparableType.IsAssignableFrom(dataType))
            {
                throw FilterErrors.TheOperatorCanOnlyUserForComparableType(this.Operator);
            }
            if (SupportOpTypes.Contains(dataType))
            {
                return(CompareFunc(left, right));
            }
            else
            {
                var method = comparableType.GetMethod(nameof(IComparable.CompareTo), new Type[] { dataType });
                return(CompareFunc(Expression.Call(left, method, right), Expression.Constant(0)));
            }
        }