首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有什么方法可以遍历一个Dapper DynamicParameters对象?

有没有什么方法可以遍历一个Dapper DynamicParameters对象?
EN

Stack Overflow用户
提问于 2012-05-08 23:07:16
回答 4查看 7.9K关注 0票数 14

我需要制作一个通用的记录器来记录某些insert/update语句,这样我的测试人员就可以验证插入的数据是否正确。

我的第一个想法是,我只需要使用一个接受DynamicParameters的函数,然后遍历DynamicParameters,生成一个字符串来列出参数的名称和值,让测试人员更容易阅读它们。

不幸的是,Dapper.DynamicParameters没有包含"GetEnumerator“的公共定义

以下是我希望做的基本示例:

代码语言:javascript
复制
string myFormattedListofParameters = "";
foreach (var p in myDynamicParameters)
{
myFormattedListofParameters += p.Name + "=" + p.Value.ToString();
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-09 13:46:30

尝试:

代码语言:javascript
复制
            var sb = new StringBuilder();
            foreach (var name in p.ParameterNames)
            {
                var pValue = p.Get<dynamic>(name);
                sb.AppendFormat("{0}={1}\n", name, pValue.ToString());
            }
票数 17
EN

Stack Overflow用户

发布于 2015-12-03 08:37:46

代码语言:javascript
复制
    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();
    }
票数 7
EN

Stack Overflow用户

发布于 2020-10-07 07:07:15

Linq中有一行:

代码语言:javascript
复制
string.Join(", ", from pn in sprocParams.ParameterNames select string.Format("@{0}={1}", pn, (sprocParams as SqlMapper.IParameterLookup)[pn]))

我正在使用它在log4net上进行记录:

代码语言:javascript
复制
Log.InfoFormat("Exec {0} {1}", storedProc, string.Join(", ", from pn in sprocParams.ParameterNames select string.Format("@{0}={1}", pn, (sprocParams as SqlMapper.IParameterLookup)[pn])));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10501319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档