ruoyi.net
的分页帮助类,如下:
csharp
public class PageUtils
{
public static PageDomain GetPageDomain()
{
var request = App.HttpContext.Request;
var pageNum = !string.IsNullOrEmpty(request?.Query["pageNum"]) ? Convert.ToInt32(request?.Query["pageNum"]) : 1;
var pageSize = !string.IsNullOrEmpty(request?.Query["pageSize"]) ? Convert.ToInt32(request?.Query["pageSize"]) : 10;
var orderByColumn = request?.Query["orderByColumn"].ToString();
var isAsc = request?.Query["isAsc"];
var orderBy = !string.IsNullOrEmpty(orderByColumn) ? $"{orderByColumn.ToUnderScoreCase()} {isAsc}" : "";
return new PageDomain
{
PageNum = pageNum > 0 ? pageNum : 1,
PageSize = pageSize > 0 ? pageSize : 10,
OrderByColumn = orderByColumn,
////PropertyName = orderByColumn.ToUpperCamelCase(),
PropertyName = orderByColumn ?? string.Empty,
OrderBy = orderBy,
IsAsc = isAsc
};
}
}
分页实体类,如下:
csharp
/// <summary>
/// 分页泛型集合
/// </summary>
public class SqlSugarPagedList<TEntity>
where TEntity : new()
{
/// <summary>
/// 页码
/// </summary>
public int PageIndex { get; set; }
/// <summary>
/// 页容量
/// </summary>
public int PageSize { get; set; }
/// <summary>
/// 总条数
/// </summary>
public int Total { get; set; }
///// <summary>
///// 总页数
///// </summary>
//public int Total { get; set; }
/// <summary>
/// 当前页集合
/// </summary>
public IEnumerable<TEntity> Rows { get; set; }
/// <summary>
/// 消息状态码
/// </summary>
public int Code { get; set; }
/// <summary>
/// 是否有上一页
/// </summary>
public bool HasPrevPages { get; set; }
/// <summary>
/// 是否有下一页
/// </summary>
public bool HasNextPages { get; set; }
}
数据查询于分页如下:
csharp
public async Task<SqlSugarPagedList<DmBedStaffDto>> GetLeaveStaffDtoPagedListAsync(DmBedStaffDto dto)
{
var pageDomain = PageUtils.GetPageDomain();
// 获取主数据库中的数据
var bedDtoList = await _dmBedRepository.Repo.Context.Queryable<DmBed>()
.LeftJoin<DmDorm>((bed, dorm) => bed.Dormid == dorm.Id)
.Select((bed, dorm) => new DmBedDto
{
Id = bed.Id,
Floorid = dorm.Floorid,
Dormid = bed.Dormid,
Dormnum = dorm.Dormnum,
Floordorm = dorm.Floordorm,
Bedname = bed.Bedname,
Bedstatus = bed.Bedstatus,
Empid = bed.Empid,
})
.ToListAsync();
// 获取从数据库中的数据
var empIds = bedDtoList.Where(b => !string.IsNullOrEmpty(b.Empid)).Select(b => b.Empid).Distinct().ToList();
var staffList = _bdStaffRepository.GetStaffByEmpId(empIds);
// 内存中联查两个集合
var query = from bed in bedDtoList
join staff in staffList on bed.Empid equals staff.EMPID
where staff.ENDFLAG == 1
select new DmBedStaffDto
{
Id = bed.Id,
Floorid = bed.Floorid,
Dormid = bed.Dormid,
Dormnum = bed.Dormnum,
Floordorm = bed.Floordorm,
Bedname = bed.Bedname,
Bedstatus = bed.Bedstatus,
Empid = bed.Empid,
Empname = staff.EMPNAME,
Sex = staff.SEX,
Certno = staff.CERTNO,
Age = staff.AGE,
Empphone = staff.MOBILE,
Linkaddr = staff.LINKADDR,
Depid = staff.DEPID,
Depcode = staff.DEPCODE,
Depname = staff.DEPNAME,
Deplevel = staff.DEPLEVEL,
Depid_h = staff.DEPID_H,
Depcode_h = staff.DEPCODE_H,
Depname_h = staff.DEPNAME_H,
Companyid = staff.COMPANY_ID,
Companycode = staff.COMPANY_CODE,
Companyname = staff.COMPANY_NAME,
Postid = staff.POSTID,
Postcode = staff.POSTCODE,
Postname = staff.POSTNAME,
Endflag = staff.ENDFLAG,
Joineddate = staff.JOINED_DATE,
Departdate = staff.DEPART_DATE
};
// 内存中分页
var list = query.OrderBy(x => x.Floorid).ThenBy(x => x.Dormnum).ToPagedList<DmBedStaffDto>(pageDomain.PageNum, pageDomain.PageSize);
return list;
}
分页扩展类,如下:
csharp
/// <summary>
/// 分页拓展
/// </summary>
/// <param name="entity"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public static SqlSugarPagedList<TEntity> ToPagedList<TEntity>(this IEnumerable<TEntity> entity, int pageIndex, int pageSize)
where TEntity : new()
{
int totalCount = entity.Count();
int skip = (pageIndex -1) * pageSize;
var items = entity.Skip(skip).Take(pageSize);
var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);
return new SqlSugarPagedList<TEntity>
{
PageIndex = pageIndex,
PageSize = pageSize,
Rows = items,
Total = (int)totalCount,
HasNextPages = pageIndex < totalPages,
HasPrevPages = pageIndex - 1 > 0
};
}
从数据库需要添加 租户
标记,如下:
csharp
[Tenant("slave")] // 从库标记
[SugarTable("IUAP_APDOC_BASEDOC.BO_BD_STAFF")] // Oracle数据库表
public class BDStaff : BaseEntity
{
public string EMPID { get; set; }
public string? EMPCODE { get; set; }
public string? EMPNAME { get; set; }
// ......
}
appsettings.json
中配置的 sqlsugar
数据库连接字符串如下:
csharp
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.EntityFrameworkCore": "Information"
}
},
"ConnectionConfigs": [
{
"ConfigId": "master",
"ConnectionString": "data source=.;initial catalog=ry_net;persist security info=False;user id=sa;pwd=666888;packet size=4096",
"DbType": "SqlServer",
"IsAutoCloseConnection": true
},
{
"ConfigId": "slave",
"ConnectionString": "Data Source=127.0.0.1:1521/orcl;User ID=yybip;Password=888666",
"DbType": "Oracle",
"IsAutoCloseConnection": true
}
],
"AppSettings": {
"InjectSpecificationDocument": false
},
"Urls": "http://0.0.0.0:7778",
"AllowedHosts": "*"
}