zoukankan      html  css  js  c++  java
  • C#/Entity Frame Core 使用Linq 进行分页 .Skip() .Take() 的使用方法

    一般使用格式为

    int pagesize  = 分页大小(每一页大小)
    int pageindex = 第几页(一般这个变量是随循环递增的)
    使用方法
    .Skip(pagesize*pageindex).Take(pagesize)

    .Skip()   忽略数,表示从哪里开始分页

    .Take()  表示每一页截取多少个记录

    注意 ,数列是从0开始的,也就是说,第一个是 0,第二个是 1 ... ...

    以上方法结合,截取的只是一页,需要在循环中使用,不断截取下一页

    例如

    {1,2,3,4,5,6,7,8,9,10}
    .Skip(5).Take(4) //忽略5个数,即从第(5+1)个数开始截!共截取4个
    输出 6,7,8,9

    再来看看另一个例子

      

                List<string> Name = new List<string> {
                    "张三1","李四2","王朝3","马汉4","张龙5", "赵虎6","王喜7","是谁8","卢小鱼9", "哈哈10","杀敌数11"
                };
                var item1 = Name.Skip(5).Take(4);
                foreach (var i in item1)
                {
                    Console.WriteLine(i);
                }
    输出
    赵虎6
    王喜7
    是谁8
    卢小鱼9

    Skip(5),不是指从第 5 个开始截,而是指 忽略前面的 5 个

    这样理解了吧?

    但是,前面的例子,只能截取一段区间的内容,不算分页。下面给出简单的分页例子。

    在C# 控制台中的写法(为了便于理解,请复制到你的VS中运行测试)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> Name = new List<string> {   //数据
                    "张三1","李四2","王朝3","马汉4","张龙5", "赵虎6","王喜7","是谁8","卢小鱼9", "大侠10","超人11"
                };
                int pagesize = 4;    //每一页的个数
                for (int i = 0; i * pagesize < Name.Count; i++)   //i 默认值为 0,用 i 表示页数
                {
                    var items = Name.Skip(i * pagesize).Take(pagesize);  //截取第 i 页
                    Console.WriteLine($"第{i + 1}页");   
                    foreach (var item in items)    //输出每一页的内容
                    {
                        Console.WriteLine("    " + item);   
                    }
                }
                Console.ReadKey();
            }
    
        }
    }
    输出
    第1页
        张三1
        李四2
        王朝3
        马汉4
    第2页
        张龙5
        赵虎6
        王喜7
        是谁8
    第3页
        卢小鱼9
        哈哈10
        杀敌数11

    那么,怎么在 ASP.NET Core/Entity Frame Core 中应用呢?

    假设 有一个新闻列表页面,如下


    我的思路是,

    每次只截取一页,用户点击第几页,就截第几页的列表。

    这样省去了循环、算法实现的复杂性。

    例子

            /// <summary>
            /// 获取第 pageIndex 页的新闻列表
            /// </summary>
            /// <param name="pageSize">每一页的大小</param>
            /// <param name="pageIndex">第几页</param>
            public IEnumerable<News> Test(int pageSize,int pageIndex)
            {
                var NewsLists = _db.News.ToList();  //从数据库中获取 News表的数据
                var items = NewsLists.Skip(pageSize * (pageIndex - 1)).Take(pageSize);   //第几页的列表
                return items;
            }

    当然,上面的例子,只是简单地截取了一页,并返回一个对象。未对数据进行任何处理。

    如果你要,一次性获取数据后,对数据分页用一个分页后的列表,这是很麻烦的。

    把数据假设为一维,分页后的数据相当于二维。

    有时也不一定需要一下子查看所有的列表,当数据要分成成白上千时,而用户只看了一页~~~~~。

    ------------

    本人是刚刚入门地菜鸟,水平有限,恳请批评。

  • 相关阅读:
    cmd git常用命令使用
    vue2.0 vue-qr生成二维码
    全局css设置
    input 输入框 json格式展示
    eslint 常用配置及说明
    es6中promise 使用总结
    vue 自定义全局组件
    vue element 表头添加斜线
    indexedDB 使用
    黑客攻防从入门到精通(攻防与脚本编程篇)
  • 原文地址:https://www.cnblogs.com/whuanle/p/9887645.html
Copyright © 2011-2022 走看看