C#分页思路:双列表数据组合返回设计思路

一、应用场景

        需要分页查询(并非全表查载入物理内存再筛选),返回列表1和列表2叠加的数据

二、实现方式

        列表1必查,列表2根据列表1的查询结果决定列表2的分页查询参数

三、示意图及其实现代码

1.示意图

        黄色代表list1的数据(26)条,绿色代表list2的数据(74条),蓝色代表分页取数据的情况(三种情况:list1  /   list1+list2   / list2 )

2.实现代码

public class Program
{
    public static void Main()
    {
        // 示例数据
        int list1count = 26;  // list1 的总条数
        int pageIndex = 1;    // 当前页码
        int pageSize = 20;    // 每页大小

        GetPaginationData(list1count, 1, pageSize);
        GetPaginationData(list1count, 2, pageSize);
        GetPaginationData(list1count, 3, pageSize);
        GetPaginationData(list1count, 4, pageSize);
        GetPaginationData(list1count, 5, pageSize);
    }

    /// <summary>
    /// 获取第二列表分页参数的方法
    /// </summary>
    /// <remarks>
    /// 该方法用于处理分页查询时,列表一和列表二组合数据返回的场景,
    /// 根据列表一的总条数和分页信息,计算并确定列表二的分页参数。
    /// </remarks>
    /// <param name="list1count">列表一的总条数</param>
    /// <param name="pageIndex">前端传入的当前页码</param>
    /// <param name="pageSize">前端传入的每页数据条数</param>
    /// <returns>
    /// 返回一个元组:
    /// - pageIndex2:第二列表跳过的记录数,表示从第二列表的哪个位置开始查询
    /// - pageSize2:第二列表每页的记录数,表示第二列表每页需要查询多少条数据
    /// </returns>
    public static (int skipCount2, int pageSize2) GetPaginationData(int list1count, int pageIndex, int pageSize)
    {
        // 计算跳过的数量和剩余的数量
        int skipCount = (pageIndex - 1) * pageSize;
        int remainCount = list1count - skipCount;

        // 初始化返回的元组
        int skipCount2 = 0;
        int pageSize2 = 0;

        // 判断剩余数据情况并赋值
        if (remainCount > pageSize)
        {
            // 绰绰有余,直接返回list1数据
            skipCount2 = 0;
            pageSize2 = 0; // 此时不需要第二列表的数据
        }
        else if (remainCount >= 0)
        {
            // 有余不足,需要返回list1数据 + 第二列表数据
            skipCount2 = 0;
            pageSize2 = pageSize - remainCount;
        }
        else
        {
            // 纯查第二列表数据
            skipCount2 = Math.Abs(remainCount);
            pageSize2 = pageSize;
        }

        // 输出调试信息
        Console.WriteLine($"【pageIndex入参】{pageIndex}【skipCount2】{skipCount2},【pageSize】{pageSize2}");

        // 返回最终结果
        return (skipCount2, pageSize2);
    }
}

3.结果

【pageIndex入参】1【skipCount2】0,【pageSize】0
【pageIndex入参】2【skipCount2】0,【pageSize】14
【pageIndex入参】3【skipCount2】14,【pageSize】20
【pageIndex入参】4【skipCount2】34,【pageSize】20
【pageIndex入参】5【skipCount2】54,【pageSize】20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值