多次执行查询

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