private static object GetDecimal <T>(ParameterExpression parameter, QueryParser.ValueContext valueContext,
                                      NamingStrategy namingStrategy = null)
 {
     if (decimal.TryParse(valueContext.GetText().Replace(".", Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator), out var result))
     {
         return(result);
     }
     if (ExpressionValue.TryParse <T>(parameter, valueContext.GetText(), namingStrategy, out var value))
     {
         return(value);
     }
     throw new QueryValueInvalidConversionException(valueContext, typeof(decimal));
 }
 private static object GetBoolean <T>(ParameterExpression parameter, QueryParser.ValueContext valueContext,
                                      NamingStrategy namingStrategy = null)
 {
     if (bool.TryParse(valueContext.GetText(), out var result))
     {
         return(result);
     }
     if (ExpressionValue.TryParse <T>(parameter, valueContext.GetText(), namingStrategy, out var value))
     {
         return(value);
     }
     throw new QueryValueInvalidConversionException(valueContext, typeof(bool));
 }
 private static object GetDateTimeOffset <T>(ParameterExpression parameter, QueryParser.ValueContext valueContext,
                                             NamingStrategy namingStrategy = null)
 {
     try
     {
         return(DateTimeOffset.Parse(valueContext.GetText(), CultureInfo.InvariantCulture,
                                     DateTimeStyles.RoundtripKind));
     }
     catch
     {
         if (ExpressionValue.TryParse <T>(parameter, valueContext.GetText(), namingStrategy, out var value))
         {
             return(value);
         }
         throw new QueryValueInvalidConversionException(valueContext, typeof(DateTimeOffset));
     }
 }
 private static object GetString <T>(ParameterExpression parameter,
                                     QueryParser.ValueContext valueContext,
                                     NamingStrategy namingStrategy = null)
 {
     if (valueContext.single_quote() != null || valueContext.double_quote() != null)
     {
         var replace = valueContext.single_quote() != null ? "'" : "\"";
         var value   = valueContext.GetText();
         return(value.Length == 2
             ? string.Empty
             : value.Substring(1, value.Length - 2).Replace("\\" + replace, replace));
     }
     if (ExpressionValue.TryParse <T>(parameter, valueContext.GetText(), namingStrategy, out var expression))
     {
         return(expression);
     }
     return(valueContext.GetText());
 }