.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不提供这种功能。您也可以检查源代码。