C#-Dapper分页帮助类
using Dapper; using System.Collections.Generic; using System.Data; using System.Text; namespace DBDapper { /// <summary> /// 分页帮助类 /// </summary> public class PageListHelper { /// <summary> /// dapper通用分页方法且排序不正确 /// </summary> /// <typeparam name="T">泛型集合实体类</typeparam> /// <param name="conn">数据库连接池连接对象</param> /// <param name="files">列名</param> /// <param name="tableName">表名</param> /// <param name="where">条件</param> /// <param name="orderby">排序</param> /// <param name="pageIndex">当前页</param> /// <param name="pageSize">当前页显示条数</param> /// <param name="total">结果集总数</param> /// <returns></returns> public static IEnumerable<T> GetPageList<T>(IDbConnection conn, string files, string tableName, string where, string orderby, int pageIndex, int pageSize,out int total) { int skip = 1; if (pageIndex > 0) { skip = (pageIndex - 1) * pageSize + 1; } StringBuilder sb = new StringBuilder(); sb.AppendFormat("SELECT COUNT(1) FROM {0} where {1};", tableName, where); sb.AppendFormat(@"SELECT {0} FROM(SELECT ROW_NUMBER() OVER(ORDER BY {3}) AS RowNum,{0} FROM {1} WHERE {2} ) AS result WHERE RowNum >= {4} AND RowNum <= {5} ORDER BY {3}", files, tableName, where, orderby, skip, pageIndex * pageSize); using (var reader = conn.QueryMultiple(sb.ToString())) //using (var reader = conn.QueryFirstOrDefault(sb.ToString())) { total = reader.ReadFirst<int>(); return reader.Read<T>(); } } /// <summary> /// dapper通用分页方法-简单多表查询 /// </summary> /// <typeparam name="T">泛型集合实体类</typeparam> /// <param name="conn">数据库连接池连接对象</param> /// /// <param name="files">内层列名</param> /// <param name="files2">外层列名</param> /// /// <param name="tableName">表名</param> /// <param name="where">条件</param> /// <param name="orderby">排序</param> /// <param name="pageIndex">当前页</param> /// <param name="pageSize">当前页显示条数</param> /// <param name="total">结果集总数</param> /// <returns></returns> public static IEnumerable<T> GetPageList2<T>(IDbConnection conn, string files, string files2, string tableName, string where, string orderby, int pageIndex, int pageSize, out int total) { int RowNumMin = 1,RowNumMax = 1, rcount=0; // 提前取总个数 StringBuilder sb1 = new StringBuilder(); sb1.AppendFormat("SELECT COUNT(1) FROM {0} where {1}", tableName, where); using (var reader1 = conn.QueryMultiple(sb1.ToString())) { rcount = reader1.ReadFirst<int>(); } // 计算本次要取的条 if (pageIndex > 0) { RowNumMax =rcount- pageSize*(pageIndex - 1); int RowNumMin1 = rcount - pageSize * pageIndex + 1; RowNumMin = RowNumMin1 >= 1? RowNumMin1:1; } // 取数据 StringBuilder sb = new StringBuilder(); sb.AppendFormat("SELECT COUNT(1) FROM {0} where {1};", tableName, where); sb.AppendFormat(@"SELECT {6} FROM(SELECT ROW_NUMBER() OVER(ORDER BY {3}) AS RowNum,{0} FROM {1} WHERE {2} ) AS result WHERE RowNum >= {4} AND RowNum <= {5} ORDER BY {3}", files, tableName, where, orderby, RowNumMin, RowNumMax, files2); using (var reader = conn.QueryMultiple(sb.ToString())) //using (var reader = conn.QueryFirstOrDefault(sb.ToString())) { total = reader.ReadFirst<int>(); return reader.Read<T>(); } } } }
补充:
Core+Dapper使用Demo:https://github.com/qq840937370/NetCoreDapperDemo
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/14991424.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
2019-07-09 记一次奇葩事——html5可能不支持window.onscroll函数