Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Dapper是否使用数字参数,例如在海量数据中_Sql Server_Dapper_Massive - Fatal编程技术网

Sql server Dapper是否使用数字参数,例如在海量数据中

Sql server Dapper是否使用数字参数,例如在海量数据中,sql-server,dapper,massive,Sql Server,Dapper,Massive,Dapper是否使用编号参数,例如在Massive(@0,@1,…)中,而不是named(@a,@b,…)中 有必要根据需要创建查询 //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 Stri

Dapper是否使用编号参数,例如在Massive(@0,@1,…)中,而不是named(@a,@b,…)中

有必要根据需要创建查询

//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 });
//选择@0作为val union select@1 union select@2 union select@3 union select@4
//联合选择@5联合选择@6联合选择@7联合选择@8联合选择@9
var sb=新的StringBuilder(“选择@0作为val”);
对于(int i=1;i<10;i++)
{
sb.附录格式(“联合选择{0}”,i);
}
var query=sb.ToString();
//---整洁=失败
var db=连接;
var list=db.Query(Query,param:newobject[]{0,1,2,3,4,5,6,7,8,9});
//---质量=正常
var db2=新的Massive.DynamicModel(硬币);
var list2=db2.Query(Query,args:newobject[]{0,1,2,3,4,5,6,7,8,9});

Dapper问题的解决方案是什么?

Massive在查询中使用位置参数,但Dapper使用命名参数。因此,在massive中,您可以传入参数数组,如:
newint[]{1,2,3}
,而在dapper中,您需要传入参数对象,如
new{a=1,b=2}

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

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

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