無論如何迭代Dapper DynamicParameters對象?

dapper

我需要創建一個通用記錄器來記錄某些插入/更新語句,以便我的測試人員可以驗證插入的數據是否正確。

我的第一個想法是,我只使用一個接受DynamicParameters的函數,我將通過DynamicParameters生成一個字符串來列出參數的名稱和值,並使它們更容易為測試人員閱讀。

不幸的是,Dapper.DynamicParameters不包含“GetEnumerator”的公共定義

這是我希望做的基本例子:

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

一般承認的答案

嘗試:

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

熱門答案

    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();
    }


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因