in src/Core/Parsers/ODataASTVisitor.cs [116:164]
private static object GetParamWithSystemType(string param, IEdmTypeReference edmType)
{
try
{
switch (edmType.PrimitiveKind())
{
case EdmPrimitiveTypeKind.Guid:
return Guid.Parse(param);
case EdmPrimitiveTypeKind.Byte:
return byte.Parse(param);
case EdmPrimitiveTypeKind.Int16:
return short.Parse(param);
case EdmPrimitiveTypeKind.Int32:
return int.Parse(param);
case EdmPrimitiveTypeKind.Int64:
return long.Parse(param);
case EdmPrimitiveTypeKind.Single:
return float.Parse(param);
case EdmPrimitiveTypeKind.Double:
return double.Parse(param);
case EdmPrimitiveTypeKind.Decimal:
return decimal.Parse(param);
case EdmPrimitiveTypeKind.Boolean:
return bool.Parse(param);
case EdmPrimitiveTypeKind.Date:
return Date.Parse(param);
case EdmPrimitiveTypeKind.DateTimeOffset:
return DateTimeOffset.Parse(param);
case EdmPrimitiveTypeKind.String:
return param;
case EdmPrimitiveTypeKind.TimeOfDay:
return TimeOnly.Parse(param);
default:
// should never happen due to the config being validated for correct types
throw new NotSupportedException($"{edmType} is not supported");
}
}
catch (Exception e)
{
if (e is FormatException ||
e is ArgumentNullException ||
e is OverflowException)
{
throw new ArgumentException($"Parameter \"{param}\" cannot be resolved as type \"{edmType}\".");
}
throw;
}
}