根据Dapper documentation,如果我传递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 } }
);
当我尝试这样做时,我得到一个InvalidOperationException
,其中包含“在此上下文中不允许使用可枚举的参数序列(数组,列表等)”。
有没有办法实现这个目标?
我正在使用Dapper 1.50.2。
答案 0 :(得分:0)
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));
}