Is there anyway to iterate through a Dapper DynamicParameters object?

纵饮孤独 提交于 2019-11-29 19:16:39

问题


I need to make a generic logger to record certain insert/update statements so that my testers can verify the data being inserted is correct.

My first thought was that I would just use a function that accepted DynamicParameters and I would foreach through the DynamicParameters to generate a string to list the parameter's name and value and make them easier to read for the testers.

Unfortunately, Dapper.DynamicParameters does not contain a public definition for "GetEnumerator"

Here is basic example of what I was hoping to do:

string myFormattedListofParameters = "";
foreach (var p in myDynamicParameters)
{
myFormattedListofParameters += p.Name + "=" + p.Value.ToString();
}

回答1:


Try:

            var sb = new StringBuilder();
            foreach (var name in p.ParameterNames)
            {
                var pValue = p.Get<dynamic>(name);
                sb.AppendFormat("{0}={1}\n", name, pValue.ToString());
            }



回答2:


    string ParametersToString(DynamicParameters parameters)
    {
        var result = new StringBuilder();

        if (parameters != null)
        {
            var firstParam = true;
            var parametersLookup = (SqlMapper.IParameterLookup)parameters;
            foreach (var paramName in parameters.ParameterNames)
            {
                if (!firstParam)
                {
                    result.Append(", ");
                }
                firstParam = false;

                result.Append('@');
                result.Append(paramName);
                result.Append(" = ");
                try
                {
                    var value = parametersLookup[paramName];// parameters.Get<dynamic>(paramName);
                    result.Append((value != null) ? value.ToString() : "{null}");
                }
                catch
                {
                    result.Append("unknown");
                }
            }

        }
        return result.ToString();
    }



回答3:


Just in case,

var pmaster = new Dapper.DynamicParameters();                            
SortedList l = new SortedList();
l.Add("param1", object1);
l.Add("param2", object2);
l.Add("param3", object3);
l.Add("param4", object4);

foreach(var key in l.Keys)
{
  var val = l[key];
  pmaster.Add(key.ToString(), val);
}

Worked for me.



来源:https://stackoverflow.com/questions/10501319/is-there-anyway-to-iterate-through-a-dapper-dynamicparameters-object

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!