Consulta rápida con una lista de parámetros

c# dapper database mysql

Pregunta

Estoy intentando ejecutar una consulta con Dapper con un conjunto conocido de parámetros, pero con una lista de valores para esos parámetros. Un ejemplo simple de lo que estoy tratando de hacer sería:

DateTime endDate = DateTime.Now;
DateTime startDate = endDate.AddHours(-24);

string query = "select COUNT(*) from Test where Status = @Status AND DateCreated <= @Hour;";
var stuff = con.Query(query, (startDate).ByHourTo(endDate).Select(hour => new
{
     Status = 1,
     Hour = hour,
}));

Dapper lanza una excepción con 'Parámetro' @Status 'debe definirse'. Sé que Dapper puede procesar listas de parámetros cuando realiza inserciones y actualizaciones masivas, pero ¿no puede hacer esto para seleccionar?

Respuesta aceptada

Ah, creo que veo lo que quieres decir ...

Sí, hay un escenario que Execute para Execute que no es compatible con Query, específicamente: ejecutar la misma operación secuencialmente con un rango de diferentes valores de parámetros. Esto tiene sentido para Execute , pero para la consulta probablemente signifique que debería estar buscando una consulta diferente usando in . Alternativamente, solo loop y concat.

En cambio, está mirando el objeto de parámetro único y buscando valores públicos: un enumerable no tiene ningún valor de parámetro adecuado para dapper.


Respuesta popular

Prueba esto:

List<string> names = new List<string> { "Bob", "Fred", "Jack" };
string query = "select * from people where Name in @names";
var stuff = connection.Query<ExtractionRecord>(query, new {names});


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é