J'ai une requête où je retourne des données dynamiques et je ne parviens pas à récupérer les valeurs via Dapper comme indiqué dans leur documentation ( https://github.com/StackExchange/Dapper ).
Ils ont un exemple de code comme ça,
var rows = connection.Query("select 1 A, 2 B union all select 3, 4");
Assert.Equal(1, (int)rows[0].A);
Cependant, lorsque je fais ce qui suit, je ne peux accéder à aucun des membres du résultat de ma requête:
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!!
erreur CS0021: impossible d'appliquer l'indexation avec [] à une expression de type 'objet'
Comment puis-je me rendre dans mes champs?
La solution consiste à faire quelque chose comme ça. Vous devez ajouter le type de retour de la requête à dynamique puis convertir chaque ligne en IDictionary<string, object>
. Une fois que vous faites cela, vous pourrez obtenir la valeur de votre requête par clé, comme ceci:
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"];
// ...
}
J'espère que ça aide les autres!