广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >linq中的分区操作符
  • 713
分享到

linq中的分区操作符

2024-04-02 19:04:59 713人浏览 薄情痞子
摘要

Linq中的分区指的是在不重新排列元素的情况下,将输入序列划分为两部分,然后返回其中一个部分的操作。 一、Take操作符 Take(int n)表示将从序列的开头返回数量为n的连续元

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[] { 86, 2, 77, 94, 100, 65, 5, 22, 70, 55, 81, 66, 45 };
            // 返回6个连续的数据
            var q = source.Take(6);

            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[] { 86, 2, 77, 94, 99, 100, 5, 22, 70, 55, 100, 66, 45 };
            // 返回集合中元素值小于100的序列
            var q = source.TakeWhile(i => i < 100);

            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[] { 86, 2, 77, 94, 100, 65, 5, 22, 70, 55, 81, 66, 45 };
            // 跳过5个元素
            var q = source.Skip(5);

            foreach (var item in q)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();
        }
    }
}

结果:

四、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[] { 86, 2, 77, 94, 100, 65, 5, 22, 70, 55, 81, 66, 45 };
            // 跳过数组中元素值小于100的元素
            var q = source.SkipWhile(i => i < 100);
            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 = 3;
            // 页数从0开始
            int PageNum = 0;
            int[] source = new int[] { 86, 2, 77, 94, 100, 65, 5, 22, 70, 55, 81, 66, 45 };
            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();
        }
    }
}

结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: linq中的分区操作符

本文链接: https://www.lsjlt.com/news/142075.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • linq中的分区操作符
    Linq中的分区指的是在不重新排列元素的情况下,将输入序列划分为两部分,然后返回其中一个部分的操作。 一、Take操作符 Take(int n)表示将从序列的开头返回数量为n的连续元...
    99+
    2022-11-13
  • linq中的分组操作符
    分组是根据一个特定的值将序列中的元素进行分组。LINQ只包含一个分组操作符:GroupBy。GroupBy操作符类似于T-SQL语言中的Group By语句。来看看GroupBy的方...
    99+
    2022-11-13
  • linq中的转换操作符
    目录一、AsEnumerable操作符二、ToArray操作符三、ToDictionary操作符四、ToList操作符五、ToLookUp操作符六、Cast操作符这些转换操作符将集合...
    99+
    2022-11-13
  • linq中的聚合操作符
    目录一、Aggregate操作符二、Average操作符1、直接求基本类型集合的平均值2、求listProduct集合中价格的平均值三、Count操作符四、LongCount操作符五...
    99+
    2022-11-13
  • linq中的限定操作符
    限定操作符运算返回一个Boolean值,该值指示序列中是否有一些元素满足条件或者是否所有元素都满足条件。 一、All操作符 All方法用来确定是否序列中的所有元素都满足条件。看下面的...
    99+
    2022-11-13
  • linq中的元素操作符
    目录一、Fitst操作符二、FirstOrDefault操作符三、Last操作符四、LastOrDefault操作符五、ElementAt操作符六:ElementAtOrDefaul...
    99+
    2022-11-13
  • linq中的连接操作符
    linq中的连接操作符主要包括Join()和GroupJoin()两个。 一、Join()操作符 Join()操作符非常类似于T-SQL中的inner join,它将两个数据源进行连...
    99+
    2022-11-13
  • linq中的串联操作符
    串联是一个将两个集合连接在一起的过程。在Linq中,这个过程通过Concat操作符实现。Concat操作符用于连接两个集合,生成一个新的集合。来看看Concat操作符的定义: pub...
    99+
    2022-11-13
  • LINQ操作符SelectMany的用法
    SelectMany操作符提供了将多个from子句组合起来的功能,相当于数据库中的多表连接查询,它将每个对象的结果合并成单个序列。 示例: student类: using ...
    99+
    2022-11-13
  • linq中的限定操作符怎么用
    本篇内容介绍了“linq中的限定操作符怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!限定操作符运算返回一个Boolean值,该值指示序...
    99+
    2023-06-29
  • Linq 中如何使用Contains操作符
    Linq 中如何使用Contains操作符,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。投影和排序您可能还注意到我在之前的示例中暗藏了一个投影。在使用 Max 操作符之前,LI...
    99+
    2023-06-17
  • LINQ中有哪些查询操作符
    这篇文章给大家介绍LINQ中有哪些查询操作符,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。操作符和LINQLINQ自身功能非常强大,无论使用的是LINQto XML、LINQto DataSets、LINQto Ent...
    99+
    2023-06-17
  • linq中聚合操作符怎么用
    这篇文章给大家分享的是有关linq中聚合操作符怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Aggregate操作符Aggregate操作符对集合值执行自定义聚合运算。来看看Aggregate的定义:p...
    99+
    2023-06-29
  • LINQ排序操作符用法
    Linq中的排序操作符包括OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse,提供了升序或者降序排序。 一、Orde...
    99+
    2022-11-13
  • LINQ查询操作分析
    这篇文章主要介绍“LINQ查询操作分析”,在日常操作中,相信很多人在LINQ查询操作分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”LINQ查询操作分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!LI...
    99+
    2023-06-17
  • LINQ投影操作符Select与限制操作符where介绍
    一、什么是LINQ它可以用来做什么 语言集成查询(Language Integrated Query,LINQ)是一系列标准查询操作符的集合,这些操作符几乎对每一种数据源的导航、过滤...
    99+
    2022-11-13
  • LINQ排序操作符怎么使用
    这篇文章主要介绍了LINQ排序操作符怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇LINQ排序操作符怎么使用文章都会有所收获,下面我们一起来看看吧。Linq中的排序操作符包括OrderBy、OrderB...
    99+
    2023-06-29
  • C#中的Linq to JSON操作实例分析
    今天小编给大家分享一下C#中的Linq to JSON操作实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-06-30
  • C#如何使用LINQ查询操作符
    这篇文章主要讲解了“C#如何使用LINQ查询操作符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何使用LINQ查询操作符”吧!连表操作符1、内连接使用 join 子句 根据特定的条件合...
    99+
    2023-07-02
  • LINQ to XML操作举例分析
    这篇文章主要讲解了“LINQ to XML操作举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ to XML操作举例分析”吧!LINQ to XML操作XElement&nbs...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作