C # Dapper cómo devolver valores dinámicos

dapper

Pregunta

Tengo una consulta en la que estoy devolviendo datos dinámicos y no puedo recuperar los valores a través de Dapper como figura en su documentación ( https://github.com/StackExchange/Dapper ).

Tienen una muestra de código como tal,

var rows = connection.Query("select 1 A, 2 B union all select 3, 4");

Assert.Equal(1, (int)rows[0].A);

Sin embargo, cuando hago lo siguiente, no puedo acceder a ninguno de los miembros del resultado de mi consulta:

var query = db.Query("SELECT SUM(UserRating) as 'Sum', AVG(UserRating) as 'Average', COUNT(*) as 'Total' FROM ActivityLogs");

query.FirstOrDefault(); // {{DapperRow, Sum= '3', Average = '3', Total = '1'}}
var sum = query[0].Sum; // error!!

error CS0021: No se puede aplicar la indexación con [] a una expresión de tipo 'objeto'

¿Cómo llego a mis campos?

Respuesta aceptada

La solución es hacer algo como esto. IDictionary<string, object> agregar el tipo de devolución de la consulta a dinámico y luego convertir cada fila en un IDictionary<string, object> . Una vez que lo hagas, podrás obtener el valor de tu consulta por clave de la siguiente manera:

IEnumerable<dynamic> query = db.Query<dynamic>("SELECT SUM(UserRating) as 'Sum', AVG(UserRating) as 'Average', COUNT(*) as 'Total' FROM ActivityLogs");
foreach (var rows in query)
{
    var fields = rows as IDictionary<string, object>;
    var sum = fields["Sum"];
    // ...
}

¡Espero que ayude a los demás!



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é