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

}
相关推荐
宝桥南山20 小时前
GitHub Models - 尝试一下使用GitHub Models
microsoft·ai·微软·c#·github·.netcore
hixiong1231 天前
C# OpenvinoSharp部署INSID3
开发语言·人工智能·ai·c#·openvinosharp
星辰徐哥1 天前
Unity C#入门:变量的定义与访问权限(public/private)
unity·c#·lucene
leoufung1 天前
LeetCode 30:Substring with Concatenation of All Words 题解(含 C 语言 uthash 实现)
c语言·leetcode·c#
hacker7071 天前
Visual Studio安装教程(C#开发版)
ide·c#·visual studio
SKY -dada1 天前
Understand 使用教程
开发语言·c#·流程图·软件构建·敏捷流程·代码复审·源代码管理
William_cl1 天前
【C#/.NET 进阶】ASP.NET 架构与最佳实践:DI 依赖注入(IoC 核心)从入门到避坑
c#·asp.net·.net
武藤一雄1 天前
WPF:MessageBox系统消息框
前端·microsoft·c#·.net·wpf
武藤一雄1 天前
WPF进阶:万字详解WPF如何性能优化
windows·性能优化·c#·.net·wpf·.netcore·鲁棒性
xiaogutou11212 天前
2026年历史课件PPT模板选购指南:教师备课效率与精度的平衡方案
开发语言·c#