You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Dapper QueryAsync传入两个参数查询复合主键数据表

关于Dapper QueryAsync处理复合主键查询的正确方式

嘿,你的思路方向是对的,但调用QueryAsync的方式需要调整一下——Dapper并不支持直接把参数单独传进去,得把它们包装成一个匿名对象(或者强类型对象)才行。

针对你这个复合主键查询的场景,具体正确的写法如下:

  1. 修正参数传递方式
    Dapper的QueryAsync方法的第二个参数需要是一个包含参数名对应值的对象,而不是零散的参数。你可以用匿名对象来快速包装:

    string sql = "SELECT * FROM TABLE WHERE ID = @ID AND VALUE = @VALUE";
    // 把ID和VALUE的值包装到匿名对象里,属性名要和SQL中的参数名一致
    var queryParams = new { ID = yourIdVariable, VALUE = yourValueVariable };
    var listTest = await _dbConnection.QueryAsync<Example>(sql, queryParams);
    
  2. 复合主键场景的额外说明
    因为你查询的是复合主键的表,通常复合主键对应的是唯一一条记录,如果你确定只会返回一条数据,用QueryFirstOrDefaultAsync<Example>会更合适,避免返回集合:

    var singleTest = await _dbConnection.QueryFirstOrDefaultAsync<Example>(sql, queryParams);
    
  3. 强类型参数的替代方案
    如果你不想用匿名对象,也可以定义一个专门的参数类,比如:

    public class ExampleQueryParams
    {
        public int ID { get; set; }
        public string VALUE { get; set; }
    }
    
    // 调用时传入实例
    var queryParams = new ExampleQueryParams { ID = yourIdVariable, VALUE = yourValueVariable };
    var listTest = await _dbConnection.QueryAsync<Example>(sql, queryParams);
    

总的来说,只要保证SQL中的参数名和传入对象的属性名对应,Dapper就能正确解析参数,复合主键的查询和普通多条件查询没有本质区别~

内容的提问来源于stack exchange,提问作者Weenhallo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:53:12