Ejecuta una consulta varias veces

.net dapper

Pregunta

De acuerdo con la documentación de Dapper , puedo ejecutar el mismo comando varias veces si paso un parámetro 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"

Me gustaría hacer algo similar pero con una consulta. La misma consulta se ejecutará varias veces y luego el resultado de cada ejecución, que sería un valor escalar, se combinaría en un resultado IEnumerable . Algo como esto:

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

Cuando trato de hacer esto, obtengo una InvalidOperationException con el mensaje "No se InvalidOperationException una secuencia enumerable de parámetros (matrices, listas, etc.) en este contexto". ¿Hay alguna manera de lograr esto?

Estoy usando Dapper 1.50.2.

Respuesta aceptada

La API no proporciona esa funcionalidad. Debería ejecutar la consulta varias veces con cada argumento de parámetro.

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


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué