c# - 如何在方法调用中传递动态参数

标签 c# dynamic dapper

我正在使用 dapper 从数据库获取数据,并且由于需要处理数据库连接,所以我将其放在 using block 中。但我开始注意到我看到了很多相同的用法,我认为编写一个包装函数可能是明智的,如下所示:

    protected IEnumerable<T> Query<T>(string query, dynamic param = null)
    {
        var connectionString = ConfigurationManager.ConnectionStrings["SomeString"].ConnectionString;

        using (var connection = new SqlConnection(connectionString))
        {
            return connection.Query<T>(query, param);
        }
    }

但这不会编译,我不太明白我得到的错误:

System.Data.SqlClient.SqlConnection' has no applicable method named 'Query' but appears to have an extension method by that name. Extension methods cannot be dynamically dispatched. Consider casting the dynamic arguments or calling the extension method without the extension method syntax

我做错了什么以及按照我在这里尝试的方式传递动态参数的正确方法是什么?

最佳答案

使用对象而不是动态

public IEnumerable<T> Query<T>(string query, object param) 
{
    var connectionString = ConfigurationManager.ConnectionStrings["SomeString"].ConnectionString;

    using(var connection = new SqlConnection(connectionString)) 
    {
        return connection.Query<T>(query, param);
    }
}

关于c# - 如何在方法调用中传递动态参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20937053/

相关文章:

c# - 如何在 C# 中用字符串实例化对象并发送参数?

sql - Dapper.net 的奇怪超时问题

c# - 为什么 Dapper 无法返回多个插入的行 ID?

c# - 多重映射字符串以在对象中列出,简洁

c# - 什么是 HTTP Referer header ?

c# - 获得文件或文件夹的所有权

c# - 枚举值应该在全局范围内是唯一的吗?

c# - ActivityIndi​​cator 没有进入正确的位置

Qt:动态小部件信号和插槽连接

javascript - Angular 2+ 从注入(inject)动态模板的标记创建 ViewRef