Dapper - 如何使用动态对象

cog*_*el0 17 c# dynamic dapper

我正在使用Dapper从SQL查询并具有动态查询:

var returns = conn.Query(dynamicQuery);
Run Code Online (Sandbox Code Playgroud)

当我循环查看结果时,我想知道我正在处理的日期类型是什么,所以我尝试执行以下操作:

foreach (var result in results)
{
    MessageBox.Show(result.GetType().ToString());
}
Run Code Online (Sandbox Code Playgroud)

但它总是MessageBox在错误上失败Cannot perform runtime binding on a null reference.

如果我改用它:

var returns = conn.Query<object>(dynamicQuery);
Run Code Online (Sandbox Code Playgroud)

然后命令工作,但它给了我一个Dapper.SqlMapper+DapperRow对象类型.

如何找到dynamic变量的类型?

Mar*_*ell 20

使用动态api,您可以根据列知道形状,即

foreach(dynamic row in query) {
    int id = row.Id;
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是,IDictionary<string, object>如果事情不太清楚,每一行也会实现:所以强制转换为那样.

或者,如果(注释)您知道有一个类型日期时间的单个单元格:

var when = conn.Query<DateTime>(...).Single();
Run Code Online (Sandbox Code Playgroud)