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

}
相关推荐
用户3952409988017 小时前
SqlSugar 连接 PostgreSQL 报错 42P01: relation does not exist 的排查与修复
c#
2601_9618752417 小时前
法考考试时间安排及科目|时间表|资料已整理
开发语言·c#·inverted-index·suffix-tree·sstable·r-tree·lsm-tree
ServBay18 小时前
你跟高级 C# 工程师的区别,就是这8个开发技巧
后端·c#·.net
2601_961875241 天前
法考备考计划表|学习计划|资料已整理
java·开发语言·学习·eclipse·tomcat·c#·hibernate
Y学院1 天前
C#游戏脚本开发全流程(Unity通用完整版)
游戏·unity·c#
淡海水1 天前
38-Hybrid生态-LeanCLR总览
unity·架构·c#·热更新·clr·hybrid·leanclr
iCxhust1 天前
C# 生成命令行程序 将hex格式烧录程序转换成bin烧录格式
开发语言·汇编·单片机·嵌入式硬件·c#·微机原理
xiaoshuaishuai81 天前
C# 封装与继承
开发语言·c#
FL16238631291 天前
基于C#winform使用纯opencv部署ppocrv5和ppocrv6的onnx模型进行OCR文件检测识别
opencv·c#·ocr
小满Autumn1 天前
log4net 日志框架 — 从配置到实战速查手册
笔记·c#·.net·wpf·上位机·log4net