C# 使用dapper进行分页的TotalCount
我使用dapper将存储过程中的结果集获取到对象列表中,并将其作为json返回给客户端:C# 使用dapper进行分页的TotalCount,c#,dapper,webapi2,C#,Dapper,Webapi2,我使用dapper将存储过程中的结果集获取到对象列表中,并将其作为json返回给客户端: public IHttpActionResult Test() { List<ProductPreview> gridLines; var cs = ConfigurationManager.ConnectionStrings["eordConnection"].ConnectionString; using (SqlConnection
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);
}
public IHttpActionResult测试()
{
列出网格线;
var cs=ConfigurationManager.ConnectionString[“eordConnection”].ConnectionString;
使用(SqlConnection conn=newsqlconnection(cs))
{
gridLines=conn.Query(“dbo.myStoredProcedure”,new{userID=1},
commandType:commandType.StoredProcess.ToList();
}
var totalCount=gridLines[0].MaxCount;//我需要知道总计数
....
返回Ok(网格线);
}
它起作用了。
ProductPreview类型的对象的最后一个属性是TotalCount,因为存储过程将total count作为每行的列返回。
(第二个选项是存储过程返回两个记录集,但我不确定如何将dapper更改为使用两个记录集)。拥有两个独立的查询不是一个选项
将gridLines json对象返回给客户机而不使用totalCount属性(因为它是开销)并将totalCount从存储过程读取到某个变量的最佳方法是什么?
将gridLines对象复制到没有totalCount属性的其他对象也会带来不必要的开销。允许您在一个查询中处理多个结果网格
例如:
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();
...
}
var sql=
@"
从CustomerId=@id的客户中选择*
从CustomerId=@id的订单中选择*
从CustomerId=@id”的返回中选择*;
使用(var multi=connection.QueryMultiple(sql,new{id=selectedId}))
{
var customer=multi.Read().Single();
var orders=multi.Read().ToList();
var返回=multi.Read().ToList();
...
}
您可能希望以不同的方式处理此问题,因为要求获得结果集和计数,因此即使QueryMultiple
有帮助,但这最好用于多个结果集
,在这种情况下,您可以计划使用动态参数
,它可以帮助您添加OutputParameter
,而不仅仅是InputParameter
,就像您在默认情况下使用匿名类型
和执行conn.Query
时所做的那样,这将有助于接收类型为IEnumerable
的结果集,可以使用代码获取输出参数值以获取下面所示的计数:
public IHttpActionResult Test()
{
List<ProductPreview> gridLines;
var cs = ConfigurationManager.ConnectionStrings["eordConnection"].ConnectionString;
using (SqlConnection conn = new SqlConnection(cs))
{
DynamicParameters dynamicParameters = new DynamicParameters();
dynamicParameters.Add("UserID",1,ParameterDirection.Input);
// Fill the Count in this Parameter
dynamicParameters.Add("Count",0,ParameterDirection.Output);
gridLines = conn.Query<ProductPreview>("dbo.myStoredProcedure", dynamicParameters,
commandType: CommandType.StoredProcedure).ToList();
var totalCount = dynamicParameters.Get<int>("Count");
}
....
return Ok(gridLines);
}
public IHttpActionResult测试()
{
列出网格线;
var cs=ConfigurationManager.ConnectionString[“eordConnection”].ConnectionString;
使用(SqlConnection conn=newsqlconnection(cs))
{
DynamicParameters DynamicParameters=新的DynamicParameters();
dynamicParameters.Add(“UserID”,1,ParameterDirection.Input);
//在此参数中填写计数
dynamicParameters.Add(“Count”,0,ParameterDirection.Output);
gridLines=conn.Query(“dbo.mystoredprocesdure”),dynamicParameters,
commandType:commandType.StoredProcess.ToList();
var totalCount=dynamicParameters.Get(“Count”);
}
....
返回Ok(网格线);
}
谢谢。这两种解决方案都有效。这个听起来更合适。