Cómo pasar parámetros dinámicos en una llamada a método

c# dapper dynamic

Pregunta

Estoy usando dapper para obtener datos de la base de datos y dado que las conexiones de bases de datos deben eliminarse, lo coloqué en un bloque de uso. Pero empecé a notar que vi muchos de los mismos usos y pensé que sería inteligente escribir una función de envoltura, algo como esto:

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

Pero esto no se compilará y no entiendo muy bien el error que recibo:

System.Data.SqlClient.SqlConnection 'no tiene ningún método aplicable llamado' Query 'pero parece tener un método de extensión con ese nombre. Los métodos de extensión no se pueden distribuir dinámicamente. Considere enviar los argumentos dinámicos o llamar al método de extensión sin la sintaxis del método de extensión

¿Qué estoy haciendo mal y cuál es la forma correcta de pasar los parámetros dinámicos de la manera que estoy tratando aquí?

Respuesta aceptada

usar object lugar de dynamic

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué