.net 多次执行查询
根据,如果我传递一个.net 多次执行查询,.net,dapper,.net,Dapper,根据,如果我传递一个IEnumerable参数,我可以多次执行相同的命令: connection.Execute(@"insert MyTable(colA, colB) values (@a, @b)", new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } } ).IsEqualTo(3); // 3 rows inserted: "1,1", "2,2" and "3,3" 我想做一些类似的事情,但有一个问题
IEnumerable
参数,我可以多次执行相同的命令:
connection.Execute(@"insert MyTable(colA, colB) values (@a, @b)",
new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } }
).IsEqualTo(3); // 3 rows inserted: "1,1", "2,2" and "3,3"
我想做一些类似的事情,但有一个问题。同一个查询将执行多次,然后每次执行的结果(即标量值)将组合在IEnumerable
结果中。大概是这样的:
IEnumerable<long> ids = connection.Query(@"insert MyTable(colA, colB) values (@a, @b);
select case(scope_identity() as bigint);",
new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } }
);
IEnumerable id=connection.Query(@“插入MyTable(colA,colB)值(@a,@b);
选择大小写(scope_identity()作为bigint);“,
new[]{new{a=1,b=1},new{a=2,b=2},new{a=3,b=3}
);
当我尝试这样做时,我得到一个invalidoOperationException
,消息是“在此上下文中不允许枚举参数序列(数组、列表等)”。
有没有办法做到这一点
我使用的是Dapper 1.50.2。API不提供该功能。您需要对每个参数执行多次查询
var sql = @"insert MyTable(colA, colB) values (@a, @b);
select case(scope_identity() as bigint);";
var parameters = new[] { new { a=1, b=1 }, new { a=2, b=2 }, new { a=3, b=3 } };
List<long> ids = new List<long>();
foreach(var param in parameters) {
ids.AddRange(connection.Query<long>(sql, param));
}
var sql=@“插入MyTable(colA,colB)值(@a,@b);
选择大小写(scope_identity()作为bigint);“;
var参数=new[]{new{a=1,b=1},new{a=2,b=2},new{a=3,b=3};
列表ID=新列表();
foreach(参数中的var参数){
AddRange(connection.Query(sql,param));
}
文档正在使用执行
,而您正在尝试使用查询
应用相同的操作。文档中没有提到能够对查询执行同样的操作。我相信这就是你error@Nkosi是的,我知道文档使用的是Execute
,而Query
示例不起作用,至少它是这样的。它只是用来表示我试图理解的东西。我解释说API不提供这种功能。您也可以检查源代码。