diff --git a/Dapper/DynamicParametersExtensions.cs b/Dapper/DynamicParametersExtensions.cs new file mode 100644 index 000000000..bbd41f762 --- /dev/null +++ b/Dapper/DynamicParametersExtensions.cs @@ -0,0 +1,45 @@ +using System.Reflection; + +namespace Dapper +{ + /// + /// An Extention Class to DynamicParameters + /// + + internal static class DynamicParametersExtensions + { + /// + /// Add Parameter if exists + /// + /// Extending DynamicParameter + /// Parameter Name + /// Parameter with type of dynamic + internal static void AddIfExists(this DynamicParameters dp, string paramName, dynamic? param) + { + if (param is null) + { + return; + } + dp.Add(paramName, param); + } + + /// + /// Add members of class as parameter; if the member is not null + /// + /// Generic Type + /// Extending DynamicParameters + /// + public static void AddParametersIfExists(this DynamicParameters dp, T param) + { + if (param is not null) + { + foreach (PropertyInfo prop in param.GetType().GetProperties()) + { + + AddIfExists(dp, paramName: prop.Name, param: prop.GetValue(param)); + + } + } + } + } +} diff --git a/Dapper/PublicAPI.Unshipped.txt b/Dapper/PublicAPI.Unshipped.txt index 91b0e1a43..1bc9f1a27 100644 --- a/Dapper/PublicAPI.Unshipped.txt +++ b/Dapper/PublicAPI.Unshipped.txt @@ -1 +1,4 @@ -#nullable enable \ No newline at end of file +#nullable enable +Dapper.DynamicParametersExtensions +static Dapper.DynamicParametersExtensions.AddIfExists(this Dapper.DynamicParameters! dp, string! paramName, dynamic? param) -> void +static Dapper.DynamicParametersExtensions.AddParametersIfExists(this Dapper.DynamicParameters! dp, T param) -> void \ No newline at end of file