【问题标题】:Dapper: How to get value from DapperRow if column name is "count(*)"?Dapper:如果列名为“count(*)”,如何从 DapperRow 获取值?
【发布时间】:2019-10-07 17:20:39
【问题描述】:

我有一个来自 Dapper 查询的动态结果,其中包含如下记录:

{DapperRow, billing_currency_code = 'USD', count(*) = '6'}

我可以使用rowVariable.billing_currency_code 访问“USD”

为了获得 '6' 值,我尝试了 rowVariable["count(*)"]rowVariable.kv["count(*)"],但不幸的是没有任何效果......

在我的情况下,我无法更改 count(*) 列名

在这种情况下,如何从DapperRow 类型的rowVariable 中获取“6”值?

【问题讨论】:

  • 我不知道答案,但你不能在查询中使用别名,这样你就没有'count(*)',而是一个可读的名称吗?如果您提供查询,我可能会提供帮助。
  • 不,很遗憾,我无法添加别名或以任何其他方式编辑查询。

标签: dapper


【解决方案1】:

如果列名确实是"count(*)",那么您可以将该行转换为字典:

var data = (IDictionary<string,object>)row;
object value = data["count(*)"];

为此(至少在 SQL Server 中),您的查询需要类似于:

select count(*) as [count(*)]

但是,在大多数情况下,列没有名称,在这种情况下:修复您的查询;p

实际上,我可能会说修复您的查询无论如何;以下内容会更容易使用:

select count(*) as [Count]

【讨论】:

  • 我无法更改查询,但转换为 IDictionary 有帮助。谢谢!
【解决方案2】:

假设您的数据如下

var Details={DapperRow, billing_currency_code = 'USD', count(*) = '6'}

因为列是动态的

var firstRow= Details.FirstOrDefault();

获取数据的标题列

var Heading= ((IDictionary<string, object>)firstRow).Keys.ToArray();

通过key获取数据的值

var details = ((IDictionary<string, object>)firstRow);
var vallues= details[Heading[0]];

【讨论】:

  • 很好地解释了初学者的例子。
  • 优秀的答案。我试图获取动态的属性(即 DapperRow)并且 GetType().GetProperties() 不为空,并且 TypeDescriptor.GetProperties() 返回的值是双倍的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
相关资源
最近更新 更多