2012-10-04 15 views
20

que tienen cadena SQL simple como esto:AddDynamicParams Dapper de declaración en la "dinámica" nombre de parámetro

"SELECT * FROM Office WHERE OfficeId IN @Ids" 

La cosa es que el nombre @Ids se introduce en un editor por lo que podría ser cualquier cosa, y mi problema es que si quiero pasar en, por ejemplo una matriz de enteros, sólo funciona con Dapper si uso:

var values = new DynamicParameters(); 
values.AddDynamicParams(new { Ids = new[] { 100, 101 } }); 

Pero esto me obliga a saber que el nombre del parámetro es Ids y eso no es el caso en mi escenario

puedo establecer un "parámetro dinámico" en Dapper con un nombre "dinámica" de esta manera:

var values = new DynamicParameters(); 
values.Add("Ids", new[] { 100, 101 }); 

Pero entonces apuesto de no construir el SQL IN (....) con parámetros independientes para cada valor.

¿Hay una manera de construir el objeto dinámico en el pasado a AddDynamicParams pero estableciendo el nombre de miembro y el valor sin conocer el nombre de antemano?

Pude modificar la fuente de Dapper para que funcionara en mi caso, pero si alguien sabe de una solución más simple y elegante, ¡estaría encantado!

Respuesta

19

acabo de presentar una solución al repositorio que permite a cualquiera de los siguientes para que funcione correctamente:

por objeto (esto funcionó anteriormente):

values.AddDynamicParams(new { ids = list }); 

o, por el solo nombre:

values.Add("ids", list); 

o, como un diccionario:

var args = new Dictionary<string, object>(); 
args.Add("ids", list); 
values.AddDynamicParams(args); 

Aún no me he implementado en NuGet. Avísame si esto es un problema.

+0

Muchas gracias Marc! ¡Funciona de maravilla! Es por eso que amo el código abierto ... ¡Excelente trabajo! –

+1

@Jaynard meh, puede obtener soluciones rápidas en código abierto y de código cerrado. Para ser realmente un ejemplo de la ventaja de open-source, me habrías enviado una solicitud de extracción al arreglo; p –

+0

jeje, eso es cierto, y recién había empezado a buscar a través del código fuente, pero me ganaste con un deslizamiento de tierra ;) –

Cuestiones relacionadas