¿Qué causa "los métodos de extensión no pueden ser enviados dinámicamente" aquí?

Error de compilación

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

Ahora, sé cómo solucionar el problema, pero estoy tratando de comprender mejor el error en sí. Tengo clases que estoy construyendo para aprovechar Dapper. Al final, voy a proporcionar algunas funcionalidades más personalizadas para hacer que nuestro tipo de acceso a datos sea mucho más ágil. En particular la construcción en el rastreo y esas cosas. Sin embargo, ahora mismo es tan simple como esto:

public class Connection : IDisposable
{
    private SqlConnection _connection;

    public Connection()
    {
        var connectionString = Convert.ToString(ConfigurationManager.ConnectionStrings["ConnectionString"]);
        _connection = new SqlConnection(connectionString);
        _connection.Open();
    }

    public void Dispose()
    {
        _connection.Close();
        _connection.Dispose();
    }

    public IEnumerable<dynamic> Query(string sql, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null)
    {
        // this one works fine, without compile error, so I understand how to
        // workaround the error
        return Dapper.SqlMapper.Query(_connection, sql, param, transaction, buffered, commandTimeout, commandType);
    }

    public IEnumerable<T> Query<T>(string sql, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null)
    {
        // this one is failing with the error
        return (IEnumerable<T>)_connection.Query(sql, param, transaction, buffered, commandTimeout, commandType);
    }
}

pero curiosamente, si simplemente emitiera una declaración como esta:

_connection.Query("SELECT * FROM SomeTable");

se compila bien.

Entonces, ¿alguien puede ayudarme a comprender por qué está fallando ese error al aprovechar la misma sobrecarga dentro de esos otros métodos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta