编程语言
首页 > 编程语言> > c# – 使用ExpandoObject传递动态参数

c# – 使用ExpandoObject传递动态参数

作者:互联网

我有一些函数,其原型看起来像这样:
public void doThings(string sql,dynamic dParams);

它使用这些参数进行某种SQL查询.我没有写它,但我必须使用它.当我做这样的事情时它工作正常:

doThings("select * from SomeTable where myval1=@v1 and myval2=@v2",
        new
        {
            v1 = new Dapper.DbString()
            {
                Value = "yay",
                IsAnsi = true,
                Length = 50
            },
            v2 = new Dapper.DbString()
            {
                Value = "really",
                IsAnsi = true,
                Length = 32
            }
        });

但是当我第一次将动态参数放入ExpandoObject时:

dynamic dynParams = new ExpandoObject();
dynParams.v1 = new Dapper.DbString()
    {
        Value = "yay",
        IsAnsi = true,
        Length = 50
    }
doThings("query here", dynParams);  

然后查询不返回任何结果.我不想调用doThings()并为十个不同的场景写入新的块十次,我可能想查询myval2或myval3等等.是否有一些特殊方式我应该通过ExpandoObject,或者其他一些方式我应该这样做一般?

解决方法:

默认情况下,Dapper不支持Expandos,但您可以将expando传递给Dictionary< string,object>的构造函数.然后将其作为动态参数传递.

标签:c,parameter-passing,sql,dynamic,expandoobject
来源: https://codeday.me/bug/20190520/1141497.html