如何在Dapper中返回动态值 [英] How to return dynamic values in Dapper

查看:0
本文介绍了如何在Dapper中返回动态值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个查询,其中我返回动态数据,但无法通过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>。一旦这样做了,您将能够通过键获得查询的值,如下所示:

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"];
    // ...
}

我希望它能帮助别人!

这篇关于如何在Dapper中返回动态值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆