Was bewirkt, dass hier „Erweiterungsmethoden nicht dynamisch verteilt werden können“?

Kompilierungsfehler

'System.Data.SqlClient.SqlConnection' hat keine anwendbare Methode mit dem Namen 'Query', scheint jedoch eine Erweiterungsmethode mit diesem Namen zu haben. Erweiterungsmethoden können nicht dynamisch verteilt werden. Erwägen Sie, die dynamischen Argumente umzusetzen oder die Erweiterungsmethode ohne die Syntax der Erweiterungsmethode aufzurufen.

Jetzt weiß ich, wie ich das Problem umgehen kann, aber ich versuche, den Fehler selbst besser zu verstehen. Ich habe eine Klasse, die ich aufbaue, um Dapper zu nutzen. Am Ende werde ich einige benutzerdefinierte Funktionen bereitstellen, um unseren Datenzugriff wesentlich effizienter zu gestalten. Insbesondere Gebäude in der Verfolgung und Sachen. Im Moment ist es jedoch so einfach:

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

aber interessanterweise, wenn ich einfach eine Aussage wie diese machen würde:

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

es kompiliert ganz gut.

Kann mir jemand bitte helfen, zu verstehen, warum die Nutzung der gleichen Überlastung in diesen anderen Methoden mit diesem Fehler fehlschlägt?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage