我正在使用dapper从存储过程中获取结果集到对象列表中并将其作为json返回给客户端:
public IHttpActionResult Test()
{
List<ProductPreview> gridLines;
var cs = ConfigurationManager.ConnectionStrings["eordConnection"].ConnectionString;
using (SqlConnection conn = new SqlConnection(cs))
{
gridLines = conn.Query<ProductPreview>("dbo.myStoredProcedure", new { userID = 1 },
commandType: CommandType.StoredProcedure).ToList();
}
var totalCount = gridLines[0].MaxCount;//I need to know total count
....
return Ok(gridLines);
}
有效。 ProductPreview类型的对象的最后一个属性是TotalCount,因为存储过程将总计数作为每行的列返回。 (第二个选项是存储过程返回两个记录集,但我不知道如何更改dapper以使用两个记录集)。有两个单独的查询不是一个选项。
在没有totalCount属性的情况下将gridLines json对象返回给客户端的最佳方法是什么(因为它是开销)并从存储过程读取总计数到某个变量? 将gridLines对象复制到没有totalCount属性的其他对象也是不必要的开销。
答案 0 :(得分:2)
Dapper允许您在单个查询中处理多个结果网格。
示例:
var sql =
@"
select * from Customers where CustomerId = @id
select * from Orders where CustomerId = @id
select * from Returns where CustomerId = @id";
using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
var customer = multi.Read<Customer>().Single();
var orders = multi.Read<Order>().ToList();
var returns = multi.Read<Return>().ToList();
...
}
答案 1 :(得分:2)
您可能希望以不同方式处理此问题,因为要求是获得Result set
和count
,然后即使QueryMultiple
有帮助,但最好用于{{ 1}},在这种情况下,您可以计划使用multiple result sets
,这可以帮助您添加Dynamic Parameters
,而不仅仅是OutputParameter
,因为您默认使用InputParameter
并且在执行Anonymous type
时,它将帮助接收类型conn.Query<ProductPreview>
的结果集,可以获取输出参数值以获取Count,如下所示使用您的代码:
IEnumerable<ProductPreview>