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

Dapper是否支持传入无命名的标量类型参数?

Dapper两种传参方式的合法性说明

两种写法都是Dapper官方支持的合法传参方式,适用场景不同:

  • 位置参数写法
    你提到的第一种语法:

    db.Query<Thing>("Select * from Things where id=?", 1)
    

    是Dapper专门提供的匿名位置参数特性,完全可以正常使用,只要注意两个限制:

    • 所有参数占位符统一写?,传入参数的顺序必须和SQL中?的出现顺序完全一致
    • 多参数场景直接按顺序逗号分隔传入即可,比如db.Query<Thing>("Select * from Things where id=? and name=?", 1, "测试名称")
      Dapper内部会自动将?替换为对应数据库适配的参数格式,不需要手动适配不同数据库的占位符规则。
  • 命名参数写法
    第二种语法是Dapper最常用的传参方式:

    db.Query<Thing>("Select * from Things where id= @id", new {id=1});
    

    这种写法适用场景更广,优势也更明显:

    • 不需要关注参数顺序,只要参数名和SQL中的占位符名称对应即可,参数较多时不容易出错
    • 代码可读性更强,能直观看到每个参数的含义
    • 支持更复杂的传参场景,比如直接传入实体类、IN查询的列表参数等,灵活度更高

用法建议

如果是单参数、简单查询的场景,两种写法按需选择即可;如果参数数量多、逻辑复杂,优先选择命名参数写法,可维护性更高。


内容的提问来源于stack exchange,提问作者Chris F Carroll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:06:02