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