Linq中的分区指的是在不重新排列元素的情况下,将输入序列划分为两部分,然后返回其中一个部分的操作。

一、Take操作符

Take(int n)表示将从序列的开头返回数量为n的连续元素,常用于分页。其定义如下:

 public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> source, int count);

该方法只接受一个整数,表示要返回的结果的数量。

看下面的例子:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace PartitionOperation
{
class Program
{
static void Main(string[] args)
{
int[] source = new int[] { , , , , , , , , , , , , };
// 返回6个连续的数据
var q = source.Take(); foreach (var item in q)
{
Console.WriteLine(item);
} Console.ReadKey();
}
}
}

结果:

二、TakeWhile操作符

TakeWhile操作符用于从输入序列中返回指定数量且满足一定条件的元素。TakeWhile方法执行时将逐个比较序列中的每个元素是否满足指定条件,直到碰到不符合指定条件的元素时,返回前面所有的元素组成的序列。看方法的定义;

 public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);

当TakeWhile操作符被调用时,会将source序列中的每一个元素顺序传递给委托predicate,只有那些使得predicate返回值为true的元素才会被添加到结果序列中。要特别注意的是,当TakeWhile操作符在查找过程中,遇到第一个返回false的元素就会立即停止执行,跳出,不管后面还有没有符合条件的元素,即使后面有符合条件的元素也不会要了。对于第二个扩展方法,委托里面含有一个int类型的参数,该参数代表集合的下标,可以依据此进行一些据下标操作的逻辑。

看下面的例子:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace PartitionOperation
{
class Program
{
static void Main(string[] args)
{
int[] source = new int[] { , , , , , , , , , , , , };
// 返回集合中元素值小于100的序列
var q = source.TakeWhile(i => i < ); foreach (var item in q)
{
Console.WriteLine(item);
} Console.ReadKey();
}
}
}

结果:

三、Skip操作符

Skip操作符用于从输入序列中跳过指定数量的元素,返回由序列中剩余的元素所组成的新序列。来看下Skip的方法定义:

 public static IEnumerable<TSource> Skip<TSource>(this IEnumerable<TSource> source, int count);

可以看到,该扩展方法只接受一个整形的参数,表示跳过的元素数量。

看下面的例子:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace PartitionOperation
{
class Program
{
static void Main(string[] args)
{
int[] source = new int[] { , , , , , , , , , , , , };
// 跳过5个元素
var q = source.Skip(); foreach (var item in q)
{
Console.WriteLine(item);
} Console.ReadKey();
}
}
}

结果:

4、SkipWhile操作符

SkipWhile操作符用于从输入序列中跳过满足一定条件指定数量的元素,与TakeWhile操作符类似。来看下SkipWhile操作符的方法定义:

 public static IEnumerable<TSource> SkipWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public static IEnumerable<TSource> SkipWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);

当SkipWhile操作符被调用时,会将输入序列中的元素走位参数传递给委托predicate,只要predicate的返回值为true,该元素就会被跳过,继续下一个元素,直到遇到一个使predicate返回值为false的元素,此元素以及输入序列中剩余的元素将组合一个新的序列返回。注意后面的不再判断,直接添加到返回序列。

第二个扩展方法的委托里的参数多了个int,还是代表下标,可以根据下标做一些逻辑处理。

看下面的例子:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace PartitionOperation
{
class Program
{
static void Main(string[] args)
{
int[] source = new int[] { , , , , , , , , , , , , };
// 跳过数组中元素值小于100的元素
var q = source.SkipWhile(i => i < );
foreach (var item in q)
{
Console.WriteLine(item);
} Console.ReadKey();
}
}
}

结果:

五、使用Take和Skip实现分页

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace PartitionOperation
{
class Program
{
static void Main(string[] args)
{
// 每页显示的条数
int PageSize = ;
// 页数从0开始
int PageNum = ;
int[] source = new int[] { , , , , , , , , , , , , };
while(PageNum*PageSize<source.Length)
{
// 分页
var query = source.Skip(PageNum * PageSize).Take(PageSize);
Console.WriteLine($"输出第{PageNum+1}页记录");
foreach (var item in query)
{
Console.WriteLine(item);
}
PageNum++;
} Console.ReadKey();
}
}
}

结果:

linq操作符:分区操作符的更多相关文章

  1. LINQ标准查询操作符(五)

    十二.相等操作符 如果两个序列的对应元素相等且这两个序列具有相同数量的元素,则视这两个序列相等. SequenceEqual方法通过并行地枚举两个数据源并比较相应元素来判断两个序列是否相等.如果两个序 ...

  2. Linq 标准查询操作符三

    本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰 ...

  3. LINQ 标准查询操作符

    本文介绍了LINQ标准查询操作符.没有这些操作符,LINQ就不会存在.本文为理解这些操作符的功能提供了很好的基础.了解它们将会很有帮助,因为LINQ的各种Provider都是基于这些操作符来完成各自丰 ...

  4. Linq学习之操作符

    一.环境搭建 下面将逐步搭建我们学习的环境,这个环境不仅仅是这次需要使用,以后的教程一样需要使用这个环境.所以请大家务必按照 搭建这里的环境否则会影响你后面的学习. 我们用到的几张表 通知消息表: 用 ...

  5. LINQ标准查询操作符详解(转)

     一. 关于LINQ       LINQ 英文全称是“Language-Integrated Query”,中文为“语言集成查询”,它是微软首席架构师.Delphi 之父和C# 之父——Anders ...

  6. LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat

    七.聚合操作符 聚合函数将在序列上执行特定的计算,并返回单个值,如计算给定序列平均值.最大值等.共有7种LINQ聚合查询操作符:Aggregate.Average.Count.LongCount.Ma ...

  7. Linq标准查询操作符

     Linq的出现让代码简洁了不少.之前在项目中基本都在使用它,但是没有完整的整理过,今天借这个周末,将其进行整理,方便后期对其的使用.Linq的操作可以分为聚合,连接,转换,元素操作符,相等操作,生成 ...

  8. LINQ标准查询操作符(四) —AsEnumerable,Cast,OfType,ToArray,ToDictionary,ToList,ToLookup,First,Last,ElementAt

    十.转换操作符 转换操作符是用来实现将输入对象的类型转变为序列的功能.名称以“As”开头的转换方法可更改源集合的静态类型但不枚举(延迟加载)此源集合.名称以“To”开头的方法可枚举(即时加载)源集合并 ...

  9. LINQ标准查询操作符(一)——select、SelectMany、Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse

    一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: //查询语法 var query = fro ...

随机推荐

  1. extjs4学习-01-准备工作

    想学习这个,在这里做个笔记. 创建了svn管理,路径http://ip:端口/repos/doc_jnfwz/liuzhenming/extjs4/extjs4 eclipse 中安装插件,支持在js ...

  2. 使用 http 请求方式获取 eureka server的服务信息

    对于一些系统不能接入 eureka server,又需要访问接入eureka server 的服务. 方法一:直接调用服务的地址是一种实现方式,弊端就是地址是写死的,万一服务地址变更则访问不到. 方法 ...

  3. 【剑道】步法(Ashi Sabaki)

    转自 http://www.openkendo.com/class7.html 步法(Ashi Sabaki)可能算是剑道中最重要的部分.,以下大致做一归纳讲解,希望能够帮助到各位新人的练习. “折足 ...

  4. Xtrabackup备份、还原、恢复Mysql操作大全

    环境:CentOS 6.7  + Mysql 5.7.19 + Xtraback 2.4.8 innobackupex常用参数: --user=USER 指定备份用户,不指定的话为当前系统用户 --p ...

  5. IOS 视频流

    https://github.com/kolyvan/kxmovie   demo 项目

  6. Modelsim添加Lattice库

    Step 1 安装好modelsim,并将modelsim的目录添加到系统PATH中. (确认方法:在任意位置同时按下Shift+鼠标右键,在出来的菜单里选择“在此处打开命令窗口”,然后输入vsim, ...

  7. 有关https安全的相关内容介绍

    Https 介绍什么是Https HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道.简单讲是H ...

  8. NET Core 1.1 版本项目和2.0环境下的项目开发注意事项

    在NET Core 1.1开发下的项目最好不要随便把工具更新升级到2.0,这样最容易导致之前的.NETCore直接被升级不兼容早前版本 会引起项目无法启动在运行调试IIS express 时候直接一闪 ...

  9. windows 定时任务:schtasks,定时关闭网易云音乐

    大部分属于转载和粘贴. 使用命令:schtasks windows 定时任务   使用样例: 每天定时关闭网易云音乐: 每天22:20关闭网易云音乐: schtasks /create /tn &qu ...

  10. 【内核】嵌入式linux内核的五个子系统

    Perface Linux内核主要由进程调度(SCHED).内存管理(MM).虚拟文件系统(VFS).网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示. 图1 Linux内核的组成部 ...