多次执行查询
Execute a query multiple times
根据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
消息 "An enumerable sequence of parameters (arrays, lists, etc) is not allowed in this context"。
有办法实现吗?
我正在使用 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));
}
根据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
消息 "An enumerable sequence of parameters (arrays, lists, etc) is not allowed in this context"。
有办法实现吗?
我正在使用 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));
}