Ho una query in cui sto restituendo dati dinamici e non sono in grado di recuperare i valori tramite Dapper come elencato nella relativa documentazione ( https://github.com/StackExchange/Dapper ).
Hanno un esempio di codice come questo,
var rows = connection.Query("select 1 A, 2 B union all select 3, 4");
Assert.Equal(1, (int)rows[0].A);
Tuttavia, quando faccio quanto segue, non posso accedere a nessuno dei membri del risultato della mia domanda:
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!!
errore CS0021: impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'oggetto'
Come posso raggiungere i miei campi?
La soluzione è di fare qualcosa di simile. È necessario aggiungere il tipo di restituzione della query a dinamico e quindi eseguire il cast di ogni riga in un IDictionary<string, object>
. Una volta che lo fai, sarai in grado di ottenere il valore per la tua query per tasto in questo modo:
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"];
// ...
}
Spero che aiuti gli altri!