public Expression GetSearchExpression()
 {
     try
     {
         var type      = Convert.ChangeType(expression.Value, propertyToSearch.PropertyType);
         var converted = Expression.Constant(type);
         return(ComparableParserExpressionFactory.GetExpression(converted, parameterExpression, propertyToSearch, expression.Type));
     }
     catch (Exception)
     {
         return(FalseComparison.ReturnsFalse);
     }
 }
        public static Expression GetExpression(ConstantExpression value, ParameterExpression parameterExpression, PropertyInfo propertyToSearch, ComparisonType comparisonType)
        {
            switch (comparisonType)
            {
            case ComparisonType.NotEquals:
            case ComparisonType.Equals:
            case ComparisonType.GreaterThanOrEquals:
            case ComparisonType.GreaterThan:
            case ComparisonType.LessThanOrEquals:
            case ComparisonType.LessThan:
                return(ComparableParserExpressionFactory.GetExpression(value, parameterExpression, propertyToSearch, comparisonType));

            case ComparisonType.StartsWith:
                return(GetLowweredExpression(value, parameterExpression, propertyToSearch, "StartsWith", new[] { typeof(string) }));

            case ComparisonType.EndsWith:
                return(GetLowweredExpression(value, parameterExpression, propertyToSearch, "EndsWith", new[] { typeof(string) }));

            default:
                return(GetLowweredExpression(value, parameterExpression, propertyToSearch, "StartsWith", new[] { typeof(string) }));
            }
        }