小巧玲珑的传递动态的参数

时间:2013-01-17 08:21:58

标签: c# orm dapper

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

在我的包装器中,我正在调用Dapper(带问题):

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

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

    return results;
}

当我尝试将“param”传递给Query时,它告诉我“无法解析符号查询”。当我删除param pass时,它工作正常。

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

2 个答案:

答案 0 :(得分:6)

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

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

然后你会这样称呼:

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

答案 1 :(得分:1)

你可以把它扔掉:

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

我再次怀疑dynamic的智慧;我知道有一个原因,但我怀疑这会带来更多弊大于利。坦率地说,dapper可以与object一起使用(“原因”是IDE问题,而不是语言问题)。