C#Dapper如何返回动态值

时间:2018-07-09 03:36:15

标签: dapper

我有一个查询,查询中我要返回动态数据,并且无法通过其文档(https://github.com/StackExchange/Dapper)中列出的Dapper检索值。

他们有类似的代码示例,

  hbox.maxHeightProperty().bind([???].heightProperty());
  ROW_CONSTRAINT = new RowConstraints(30, 30, Integer.MAX_VALUE,
            Priority.ALWAYS, VPos.TOP, true); // all rows other than the header has this constraint. 

但是,当我执行以下操作时,我无法访问查询结果的任何成员:

var rows = connection.Query("select 1 A, 2 B union all select 3, 4");

Assert.Equal(1, (int)rows[0].A);

错误CS0021:无法将带有[]的索引应用于类型为'object'的表达式

我如何进入我的领域?

2 个答案:

答案 0 :(得分:1)

解决方案是执行类似的操作。您需要将查询的返回类型添加到 dynamic ,然后将每一行强制转换为/suppliers/{supplierNumber}。完成此操作后,您将可以通过键来获取查询的值,如下所示:

product1 -> supplier1
product2 -> supplier2
product3 -> supplier3

我希望它可以帮助其他人!

答案 1 :(得分:1)

如果您使用的是C#7或更高版本,则还可以使用value tuples来映射返回的行。这样可以避免使用dynamic,并具有更好的类型安全性。

问题查询可能如下所示(添加了换行符以防止滚动):

var query = db.Query<(int Sum, int Average, int Total)>(@"
     SELECT SUM(UserRating) as 'Sum',
            AVG(UserRating) as 'Average',
            COUNT(*) as 'Total'
     FROM ActivityLogs");

var firstSum = query.FirstOrDefault().Sum;