首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dapper是否使用编号参数,如Massive

Dapper是否使用编号参数,如Massive
EN

Stack Overflow用户
提问于 2013-04-15 01:10:01
回答 1查看 718关注 0票数 2

Dapper是否使用编号参数,如Massive(@0,@1,...)不像命名的(@a,@b,...)?

有必要创建查询,如下所示

代码语言:javascript
运行
复制
//select @0 as val union select @1 union select @2 union select @3 union select @4 
//union select @5 union select @6 union select @7 union select @8 union select @9
var sb = new StringBuilder("select @0 as val");
for (int i = 1; i < 10; i++)
{
    sb.AppendFormat(" union select @{0}", i);
}
var query = sb.ToString();
//---Dapper = fail
var db = Connection;
var list = db.Query(query, param: new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
//---Massive = ok
var db2 = new Massive.DynamicModel(coins);
var list2 = db2.Query(query, args: new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });

对于Dapper来说,问题的解决方案是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-15 04:18:15

Massive在他们的查询中使用位置参数,但dapper使用命名参数。所以在massive中,你可以传入参数数组,比如:new int[] {1,2,3},而在dapper中,你需要传入参数对象,比如new { a = 1, b = 2 }

要使用dapper实现类似的解决方案,您可以创建一个DynamicParameters对象,您可以在其中传递参数字典,其中键是参数的名称,值是参数的值,类似于{"0",0}, {"1", 1},

您可以使用LINQ轻松地将数组转换为字典:

代码语言:javascript
运行
复制
var dictionary = new object[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    .Select((item, ind) => new {ind = ind.ToString(), item})
    .ToDictionary(item => item.ind, item => item.item);

DynamicParameters p = new DynamicParameters(dictionary);

var list = db.Query(query, param: p);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16001809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档