C# 短小精悍的动态参数

C# 短小精悍的动态参数,c#,orm,dapper,C#,Orm,Dapper,我目前正在为Dapper编写一个包装器。这个包装器强制每个查询都是一个存储过程 在我的包装中,我这样称呼Dapper(有问题): public IEnumerable选择(字符串storedProcName,动态参数){ i数不清的结果; 使用(var connection=newsqlconnection(_connectionString){ 结果=connection.Query(storedProcName,param,commandType:commandType.StoredProc

我目前正在为Dapper编写一个包装器。这个包装器强制每个查询都是一个存储过程

在我的包装中,我这样称呼Dapper(有问题):

public IEnumerable选择(字符串storedProcName,动态参数){
i数不清的结果;
使用(var connection=newsqlconnection(_connectionString){
结果=connection.Query(storedProcName,param,commandType:commandType.StoredProcedure);
}
返回结果;
}
当我尝试向查询传递“param”时,它告诉我“无法解析符号查询”。当我删除param传递时,它工作正常


有谁能给我指出正确的方向,这样我就可以将动态参数(或类似的东西)传递给Dapper吗?

您只需要将参数更改为type object,当您调用它时,您可以使用匿名类型来传递参数

public IEnumerable<T> Select<T>(string storedProcName, object param) {
    IEnumerable<T> results;

    using(var connection = new SqlConnection(_connectionString) {
        results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure);
    }

    return results;
}
public IEnumerable选择(字符串storedProcName,对象参数){
i数不清的结果;
使用(var connection=newsqlconnection(_connectionString){
结果=connection.Query(storedProcName,param,commandType:commandType.StoredProcedure);
}
返回结果;
}
那么你会这样称呼它:

var results = query.Select<Entity>("spname", new { Id = 2, Something = "test" });
var results=query.Select(“spname”,new{Id=2,Something=“test”});

你可以把它扔掉:

results = connection.Query<T>(storedProcName,
    (object)param, commandType: CommandType.StoredProcedure);
results=connection.Query(storedProcName,
(对象)参数,commandType:commandType.StoredProcess);
我怀疑动态的
是否明智;我知道这是有原因的,但我怀疑它弊大于利。坦率地说,dapper可以处理
对象
(“原因”是IDE问题,而不是语言问题)

results = connection.Query<T>(storedProcName,
    (object)param, commandType: CommandType.StoredProcedure);