【发布时间】:2021-07-15 13:37:04
【问题描述】:
我正在通过执行以下操作来检索记录:
using (var multi = await connection.QueryMultipleAsync(procedureName, param, commandType: CommandType.StoredProcedure))
{
var results = new List<dynamic>();
while (!multi.IsConsumed)
{
results.Add(multi.Read().ToList());
}
return results;
}
到目前为止一切顺利。存储过程通过执行以下操作返回数据:
SELECT * FROM @Orders;
SELECT * FROM @OrderDetails;
是否可以将List<dynamic>更改为Dictionary<string, IEnumerable<dynamic>>并在读取GridReader时自动设置键,这样在上面的示例中,字典将有两个条目,键为Orders和@ 987654328@.
使用Read<T> 不是这个问题的解决方案,因为该方法非常通用并且不知道返回什么。
【问题讨论】:
-
这能回答你的问题吗? How to return dynamic types List<dynamic> with Dapper ORM 虽然你非常期待 Dapper 猜出使用什么类型,但我不知道。它无法知道正在查询哪个底层表(甚至 如果有 表正在被查询,它可能是
VALUES或 Json 或 XML),它只能看到列名 -
为什么要拆分它们? (除非你无法控制)。相反,我会创建一个查询
JOINingOrders和OrderDetails并为 Dapper 创建一个匹配的数据传输对象类,以将结果映射到您的类。 -
@EspressoBeans 我无法控制来自存储过程的内容。那两张桌子只是一个例子。表可能彼此无关。
标签: c# sql-server dapper