多次执行查询

时间:2017-08-18 08:34:46

标签: .net dapper

根据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。

1 个答案:

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