Dapper: cómo trabajar con objetos dinámicos

c# dapper dynamic

Pregunta

Estoy usando Dapper para consultar desde SQL y tengo una consulta dinámica como tal:

var returns = conn.Query(dynamicQuery);

Cuando reviso los resultados, me gustaría saber cuál es el tipo de fecha que manejo, así que intenté hacer lo siguiente:

foreach (var result in results)
{
    MessageBox.Show(result.GetType().ToString());
}

Pero siempre falla en el MessageBox con el error Cannot perform runtime binding on a null reference .

Si uso esto en su lugar:

var returns = conn.Query<object>(dynamicQuery);

Entonces el comando funciona, pero me da un tipo de objeto Dapper.SqlMapper+DapperRow .

¿Cómo puedo encontrar el tipo de variable dynamic ?

Respuesta aceptada

Con la api dinámica, se espera que conozca la forma en términos de columnas, es decir,

foreach(dynamic row in query) {
    int id = row.Id;
    //...
}

Sin embargo, cada fila también implementa IDictionary<string, object> si las cosas son menos claras: así que se IDictionary<string, object> en eso.

Alternativamente, si (comentarios) sabe que hay una sola celda de tipo fecha y hora:

var when = conn.Query<DateTime>(...).Single();


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow