/// <summary> /// QueryPageListAsync /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="sql"></param> /// <param name="param"></param> /// <returns></returns> public Task <PageResult <TEntity> > QueryPageListAsync <TEntity>(int pageIndex, int pageSize, string sql, object param = null, IDbContextTransaction trans = null) where TEntity : class { var connection = GetConnection(); pageSize = pageSize > 0 ? pageSize : 1; pageIndex = pageIndex > 0 ? pageIndex : 1; if (!PagingHelper.SplitSql(sql, out SqlParts parts)) { throw new Exception("Unable to parse SQL statement for paged query"); } long skip = (pageIndex - 1) * pageSize; long take = pageSize; var databaseType = DatabaseType.MySql; if (_context.Database.IsMySql()) { databaseType = DatabaseType.MySql; } else if (_context.Database.IsSqlServer()) { databaseType = DatabaseType.SqlServer2012; } var sqlPage = PagingHelper.GetSqlPage(skip, take, parts, databaseType); var sqlCount = parts.SqlCount; var result = new PageResult <TEntity> { PageIndex = pageIndex, PageSize = pageSize, Total = connection.ExecuteScalar <long>(sqlCount) }; if (result.Total == 0) { return(Task.FromResult(result)); } result.PageCount = result.Total / pageSize; if ((result.Total % pageSize) != 0) { result.PageCount++; } result.Items = connection.Query <TEntity>(sqlPage, param, trans?.GetDbTransaction())?.ToList(); return(Task.FromResult(result)); }