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?
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!