/// <summary> /// Converts to a <see cref="SqlParameter"/>. /// </summary> /// <param name="parameterDefinition">The parameter representation.</param> /// <returns>SqlParameter.</returns> public static SqlParameter ToSqlParameter( this ParameterDefinitionBase parameterDefinition) { parameterDefinition.MustForArg(nameof(parameterDefinition)).NotBeNull(); if (parameterDefinition is InputParameterDefinition <byte[]> binaryRepresentationInput) { return(binaryRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <decimal> decimalRepresentationInput) { return(decimalRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <int> intRepresentationInput) { return(intRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <int?> intNullableRepresentationInput) { return(intNullableRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <long> longRepresentationInput) { return(longRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <long?> longNullableRepresentationInput) { return(longNullableRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <string> stringRepresentationInput) { return(stringRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <DateTime> dateTimeRepresentationInput) { return(dateTimeRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is InputParameterDefinition <DateTime?> dateTimeNullableRepresentationInput) { return(dateTimeNullableRepresentationInput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <byte[]> binaryRepresentationOutput) { return(binaryRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <decimal> decimalRepresentationOutput) { return(decimalRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <int> intRepresentationOutput) { return(intRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <int?> intNullableRepresentationOutput) { return(intNullableRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <long> longRepresentationOutput) { return(longRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <long?> longNullableRepresentationOutput) { return(longNullableRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <string> stringRepresentationOutput) { return(stringRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <DateTime> dateTimeRepresentationOutput) { return(dateTimeRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition is OutputParameterDefinition <DateTime?> dateTimeNullableRepresentationOutput) { return(dateTimeNullableRepresentationOutput.ToSqlParameter()); } else if (parameterDefinition.GetType().GetGenericArguments().SingleOrDefault()?.IsEnum ?? false) { var genericDefinition = parameterDefinition.GetType().GetGenericTypeDefinition(); if (genericDefinition == typeof(InputParameterDefinition <>)) { var enumValue = parameterDefinition.GetType() .GetProperty(nameof(InputParameterDefinition <string> .Value)) ?.GetValue(parameterDefinition); var stringParameter = new InputParameterDefinition <string>(parameterDefinition.Name, parameterDefinition.SqlDataType, enumValue?.ToString()); return(stringParameter.ToSqlParameter()); } else if (genericDefinition == typeof(OutputParameterDefinition <>)) { var stringParameter = new OutputParameterDefinition <string>(parameterDefinition.Name, parameterDefinition.SqlDataType); return(stringParameter.ToSqlParameter()); } else { throw new NotSupportedException(FormattableString.Invariant($"Param type {parameterDefinition.GetType().ToStringReadable()} is not supported.")); } } else { throw new NotSupportedException(FormattableString.Invariant($"{nameof(ParameterDefinitionBase)} {nameof(parameterDefinition)} of type {parameterDefinition.GetType().ToStringReadable()} is not a supported type parameter.")); } }