C#/Entity Frame Core使用Linq进行分页.skip().Take()的使用方法

简介: 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 中应用呢?

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


微信图片_20220426100944.png


我的思路是,

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

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

例子


/// <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;
        }


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

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

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

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

相关文章
|
6月前
|
SQL 开发框架 .NET
C#进阶-LINQ实现对集合的增删改查
本篇演示了LINQ在日常开发中的常用操作,实现结果集的增删改查。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
86 0
|
开发框架 前端开发 .NET
C# ASP.NET Core开发学生信息管理系统(一)
C# ASP.NET Core开发学生信息管理系统(一)
425 0
|
2月前
|
开发框架 自然语言处理 .NET
C#一分钟浅谈:LINQ 查询表达式的使用技巧
【9月更文挑战第6天】LINQ(Language Integrated Query)是C#开发中的强大工具,使查询数据集合变得简单且接近自然语言。本文从基础入手,通过具体示例讲解LINQ查询表达式的使用技巧,包括过滤、排序和分组等操作。同时,文章还探讨了常见问题及解决方法,如性能优化、过早枚举和类型转换等,帮助开发者写出更高效、易维护的代码。
97 15
|
6月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
370 2
|
5月前
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
33 0
|
11月前
|
XML 开发框架 .NET
C# | Linq基本功 —— 必学的必熟的10个方法
Linq(Language Integrated Query)是C#语言中的一种查询语言,它提供了一种统一的方式来查询和操作各种数据源,如集合、数据库、XML等。Linq的出现使得开发者能够以一种更简洁、更直观的方式来处理数据,提高了代码的可读性和可维护性。
136 0
|
6月前
|
SQL 开发框架 .NET
C#linq表达式的应用
C#linq表达式的应用
41 0
|
6月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---group和join相关用法(三)
C#学习相关系列之Linq用法---group和join相关用法(三)
243 1
|
6月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
352 2
|
6月前
|
开发框架 .NET C#
C#学习相关系列之Linq常用方法---排序(一)
C#学习相关系列之Linq常用方法---排序(一)