asp.net core postgresql 大数据高性能分页
/// <summary>
/// 分页:返回json格式,参数加密
/// </summary>
/// <param name="tbl">表名,Des加密</param>
/// <param name="flds">读取字段,Des加密:如title,cdt,pv,flg</param>
/// <param name="orderfld">排序,Des加密:如id desc</param>
/// <param name="sqlwhere">搜索条件,Des加密:如1=1</param>
/// <param name="pagesize">分页大小:如10</param>
/// <param name="pageindex">当前页数:如1</param>
/// <returns></returns>
//[QueryParameters]
//登录判断
[Authorize]
[NonUnify]
[Route("GetPage")]
[HttpPost]
public async Task<object> GetPage(string tbl, string flds, string orderfld, string sqlwhere, int pagesize = 15, int pageindex = 1)
{
tbl = SecurityHelper.DesDec(tbl);
flds = SecurityHelper.DesDec(flds);
orderfld = SecurityHelper.DesDec(orderfld);
sqlwhere = SecurityHelper.DesDec(sqlwhere);
string sql = "select * from (select row_number() over (order by " + orderfld + ") as rowid, " + flds + " from " + tbl + ") as a where rowid > (" + pagesize + " * (" + pageindex + " - 1)) and rowid <= (" + pagesize + " * " + pageindex + ") and " + sqlwhere;
var dt = await _db.Ado.GetDataTableAsync(sql);
ArrayList arrayList = new ArrayList();
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
Hashtable ht = new Hashtable();
for (int j = 0; j < dt.Columns.Count; j++)
{
string ColName = dt.Columns[j].ColumnName;
object ColRowData = dt.Rows[i][dt.Columns[j].ColumnName];
ht.Add(ColName, ColRowData.ToString());
}
await Task.Run(() => arrayList.Add(ht));
}
}
dt.Dispose();
var TotalPage =await _db.Ado.GetStringAsync("select count(*) from " + tbl + " where " + sqlwhere);
return new ApiPageResult { statusCode = 200, totaldata = TotalPage, data = arrayList, succeeded = true };
}
