C#使用linq将数据进行分页

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": "*"

}
相关推荐
2501_9307077820 小时前
使用C#代码更改 PowerPoint 幻灯片大小
开发语言·c#·powerpoint
Z_W_H_21 小时前
【C#】C#中值类型和引用类型参数传递的区别
开发语言·c#
用户8356290780511 天前
使用 C# 高效解析 PDF 文档:文本与表格提取实战指南
后端·c#
rit84324991 天前
C#实现的远程控制系统
前端·javascript·c#
wuguan_1 天前
C#中的静态成员、常量和只读变量
开发语言·c#
秋雨雁南飞1 天前
C# SignalR 添加Swagger
c#·swagger·signalr
张人玉1 天前
C# 与西门子 PLC 通信:地址相关核心知识点
开发语言·microsoft·c#·plc
Yuuuuuuu1 天前
WPF基于Canvas绘制多边形ROI
c#
缺点内向1 天前
如何在 C# 中重命名 Excel 工作表并设置标签颜色
开发语言·c#·excel
a努力。1 天前
网易Java面试被问:偏向锁在什么场景下反而降低性能?如何关闭?
java·开发语言·后端·面试·架构·c#