У меня есть запрос, когда я возвращаю динамические данные и не могу получить значения через Dapper, как указано в их документации ( https://github.com/StackExchange/Dapper ).
У них есть образец кода, например,
var rows = connection.Query("select 1 A, 2 B union all select 3, 4");
Assert.Equal(1, (int)rows[0].A);
Тем не менее, когда я делаю следующее, я не могу получить доступ к кому-либо из членов моего запроса:
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!!
ошибка CS0021: Невозможно применить индексирование с [] к выражению типа 'object'
Как мне добраться до моих полей?
Решение состоит в том, чтобы сделать что-то вроде этого. Вам нужно добавить возвращаемый тип запроса в динамический, а затем IDictionary<string, object>
каждую строку в IDictionary<string, object>
. Как только вы это сделаете, вы сможете получить значение для своего запроса по ключу следующим образом:
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"];
// ...
}
Надеюсь, это поможет другим!