广告
返回顶部
首页 > 资讯 > 精选 >LINQ排序操作符怎么使用
  • 735
分享到

LINQ排序操作符怎么使用

2023-06-29 08:06:22 735人浏览 泡泡鱼
摘要

这篇文章主要介绍了LINQ排序操作符怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇LINQ排序操作符怎么使用文章都会有所收获,下面我们一起来看看吧。Linq中的排序操作符包括OrderBy、OrderB

这篇文章主要介绍了LINQ排序操作符怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇LINQ排序操作符怎么使用文章都会有所收获,下面我们一起来看看吧。

Linq中的排序操作符包括OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse,提供了升序或者降序排序。

LINQ排序操作符怎么使用

一、OrderBy操作符

OrderBy操作符用于对输入序列中的元素进行排序,排序基于一个委托方法的返回值顺序。排序过程完成后,会返回一个类型为iorderEnumerable<T>的集合对象。其中IOrderEnumerable<T>接口继承自IEnumerable<T>接口。下面来看看OrderBy的定义:

LINQ排序操作符怎么使用

从上面的截图中可以看出,OrderBy是一个扩展方法,只要实现了IEnumerable<T>接口的就可以使用OrderBy进行排序。OrderBy共有两个重载方法:第一个重载的参数是一个委托类型和一个实现了IComparer<T>接口的类型。第二个重载的参数是一个委托类型。看看下面的示例:

定义产品类:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OrderOperation{    public class Products    {        public int Id { get; set; }        public int CateGoryId { get; set; }        public string Name { get; set; }        public double Price { get; set; }        public DateTime CreateTime { get; set; }    }}

在Main()方法里面调用:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OrderOperation{    class Program    {        static void Main(string[] args)        {            // 初始化数据            List<Products> listProduct = new List<Products>()            {               new Products(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now},               new Products(){Id=2,CategoryId=1, Name="Redis开发运维", Price=69.9,CreateTime=DateTime.Now.ADDDays(-19)},               new Products(){Id=3,CategoryId=1, Name="asp.net Core", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},               new Products(){Id=4,CategoryId=1, Name="Entity Framework 6.x", Price=97,CreateTime=DateTime.Now.AddMonths(-1)}            };            Console.WriteLine("方法语法");            // 1、查询方法,返回匿名类            var list = listProduct.OrderBy(p => p.CreateTime).Select(p => new { id = p.Id, ProductName = p.Name,ProductPrice=p.Price,PublishTime=p.CreateTime }).ToList();            foreach (var item in list)            {                Console.WriteLine($"item:{item}");            }            Console.WriteLine("查询表达式");            // 2、查询表达式,返回匿名类            var listExpress = from p in listProduct orderby p.CreateTime select new { id = p.Id, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime };            foreach (var item in listExpress)            {                Console.WriteLine($"item:{item}");            }            Console.ReadKey();        }    }}

结果:

LINQ排序操作符怎么使用

从截图中可以看出,集合按照CreateTime进行升序排序。

在来看看第一个重载方法的实现:

先定义PriceComparer类实现IComparer<T>接口,PriceComparer类定义如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OrderOperation{    public class PriceComparer : IComparer<double>    {        public int Compare(double x, double y)        {            if (x > y)            {                return 1;     //表示x>y            }            else if (x < y)            {                return -1;    //表示x<y            }            else            {                return 0;     //表示x=y            }        }    }}

在Main()方法里面调用:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OrderOperation{    class Program    {        static void Main(string[] args)        {            // 初始化数据            List<Products> listProduct = new List<Products>()            {               new Products(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now},               new Products(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},               new Products(){Id=3,CategoryId=1, Name="ASP.net Core", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},               new Products(){Id=4,CategoryId=1, Name="Entity Framework 6.x", Price=97,CreateTime=DateTime.Now.AddMonths(-1)}            };            Console.WriteLine("方法语法");            // 1、查询方法,按照价格升序排序,返回匿名类            var list = listProduct.OrderBy(p => p.Price,new PriceComparer()).Select(p => new { id = p.Id, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime }).ToList();            foreach (var item in list)            {                Console.WriteLine($"item:{item}");            }            Console.ReadKey();        }    }}

结果:

LINQ排序操作符怎么使用

注意:orderby必须在select之前出现,查询表达式最后只可能出现select或者groupby。

二、OrderByDescending

OrderByDescending操作符的功能与OrderBy操作符基本相同,二者只是排序的方式不同。OrderBy是升序排序,而OrderByDescending则是降序排列。下面看看OrderByDescending的定义:

LINQ排序操作符怎么使用

从方法定义中可以看出,OrderByDescending的方法重载和OrderBy的方法重载一致。来看下面的例子:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OrderOperation{    class Program    {        static void Main(string[] args)        {            // 初始化数据            List<Products> listProduct = new List<Products>()            {               new Products(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now},               new Products(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},               new Products(){Id=3,CategoryId=1, Name="ASP.NET Core", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},               new Products(){Id=4,CategoryId=1, Name="Entity Framework 6.x", Price=97,CreateTime=DateTime.Now.AddMonths(-1)}            };            // 注意:OrderByDescending的方法语法和查询表达式写法有些不同。            Console.WriteLine("方法语法");            // 1、查询方法,按照时间降序排序,返回匿名类            var list = listProduct.OrderByDescending(p => p.CreateTime).Select(p => new { id = p.Id, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime }).ToList();            foreach (var item in list)            {                Console.WriteLine($"item:{item}");            }            Console.WriteLine("查询表达式");            var listExpress = from p in listProduct orderby p.CreateTime descending select new { id = p.Id, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime };            foreach (var item in list)            {                Console.WriteLine($"item:{item}");            }            Console.ReadKey();        }    }}

结果:

LINQ排序操作符怎么使用

从截图中可以看出:输出结果按照时间降序排序。在来看看另外一个重载方法的调用:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OrderOperation{    class Program    {        static void Main(string[] args)        {            // 初始化数据            List<Products> listProduct = new List<Products>()            {               new Products(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now},               new Products(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},               new Products(){Id=3,CategoryId=1, Name="ASP.NET Core", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},               new Products(){Id=4,CategoryId=1, Name="Entity Framework 6.x", Price=97,CreateTime=DateTime.Now.AddMonths(-1)}            };            Console.WriteLine("方法语法");            // 1、查询方法,按照价格降序排序,返回匿名类            var list = listProduct.OrderByDescending(p => p.Price, new PriceComparer()).Select(p => new { id = p.Id, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime }).ToList();            foreach (var item in list)            {                Console.WriteLine($"item:{item}");            }            Console.ReadKey();        }    }}

结果:

LINQ排序操作符怎么使用

输出结果也是按照时间降序排序。

三、ThenBy排序

ThenBy操作符可以对一个类型为IOrderedEnumerable<T>,(OrderBy和OrderByDesceding操作符的返回值类型)的序列再次按照特定的条件顺序排序。ThenBy操作符实现按照次关键字对序列进行升序排列。下面来看看ThenBy的定义:

LINQ排序操作符怎么使用

从截图中可以看出:ThenBy()方法扩展的是IOrderedEnumerable<T>,因此ThenBy操作符长常常跟在OrderBy和OrderByDesceding之后。看下面的示例:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OrderOperation{    class Program    {        static void Main(string[] args)        {            // 初始化数据            List<Products> listProduct = new List<Products>()            {               new Products(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now},               new Products(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},               new Products(){Id=3,CategoryId=2, Name="活着", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},               new Products(){Id=4,CategoryId=3, Name="高等数学", Price=97,CreateTime=DateTime.Now.AddMonths(-1)}            };            // 注意:ThenBy()的方法语法和查询表达式写法有些不同。            Console.WriteLine("方法语法升序排序");            // 1、查询方法,按照商品分类升序排序,如果商品分类相同在按照价格升序排序 返回匿名类            var list = listProduct.OrderBy(p => p.CategoryId).ThenBy(p=>p.Price).Select(p => new { id = p.CategoryId, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime }).ToList();            foreach (var item in list)            {                Console.WriteLine($"item:{item}");            }            Console.WriteLine("查询表达式升序排序");            var listExpress = from p in listProduct orderby p.CategoryId,p.Price select new { id = p.CategoryId, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime };            foreach (var item in listExpress)            {                Console.WriteLine($"item:{item}");            }            Console.WriteLine("方法语法降序排序");            // 1、查询方法,按照商品分类降序排序,如果商品分类相同在按照价格升序排序 返回匿名类            var listDesc = listProduct.OrderByDescending(p => p.CategoryId).ThenBy(p => p.Price).Select(p => new { id = p.CategoryId, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime }).ToList();            foreach (var item in listDesc)            {                Console.WriteLine($"item:{item}");            }            Console.WriteLine("查询表达式降序排序");            var listExpressDesc = from p in listProduct orderby p.CategoryId descending , p.Price select new { id = p.CategoryId, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime };            foreach (var item in listExpressDesc)            {                Console.WriteLine($"item:{item}");            }            Console.ReadKey();        }    }}

结果:

LINQ排序操作符怎么使用

四、ThenByDescending

ThenByDescending操作符于ThenBy操作符非常类似,只是是按照降序排序,实现按照次关键字对序列进行降序排列。来看看ThenByDescending的定义:

LINQ排序操作符怎么使用

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace OrderOperation{    class Program    {        static void Main(string[] args)        {            // 初始化数据            List<Products> listProduct = new List<Products>()            {               new Products(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now},               new Products(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},               new Products(){Id=3,CategoryId=2, Name="活着", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},               new Products(){Id=4,CategoryId=3, Name="高等数学", Price=97,CreateTime=DateTime.Now.AddMonths(-1)}            };            // 注意:ThenByDescending()的方法语法和查询表达式写法有些不同。            Console.WriteLine("方法语法升序排序");            // 1、查询方法,按照商品分类升序排序,如果商品分类相同在按照价格降序排序 返回匿名类            var list = listProduct.OrderBy(p => p.CategoryId).ThenByDescending(p => p.Price).Select(p => new { id = p.CategoryId, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime }).ToList();            foreach (var item in list)            {                Console.WriteLine($"item:{item}");            }            Console.WriteLine("查询表达式升序排序");            var listExpress = from p in listProduct orderby p.CategoryId, p.Price descending select new { id = p.CategoryId, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime };            foreach (var item in listExpress)            {                Console.WriteLine($"item:{item}");            }            Console.WriteLine("方法语法降序排序");            // 1、查询方法,按照商品分类降序排序,如果商品分类相同在按照价格降序排序 返回匿名类            var listDesc = listProduct.OrderByDescending(p => p.CategoryId).ThenByDescending(p => p.Price).Select(p => new { id = p.CategoryId, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime }).ToList();            foreach (var item in listDesc)            {                Console.WriteLine($"item:{item}");            }            Console.WriteLine("查询表达式降序排序");            var listExpressDesc = from p in listProduct orderby p.CategoryId descending, p.Price descending select new { id = p.CategoryId, ProductName = p.Name, ProductPrice = p.Price, PublishTime = p.CreateTime };            foreach (var item in listExpressDesc)            {                Console.WriteLine($"item:{item}");            }            Console.ReadKey();        }    }}

结果:

LINQ排序操作符怎么使用

五、Reverse

Reverse操作符用于生成一个与输入序列中元素相同,但元素排列顺序相反的新序列。下面来看看Reverse()方法的定义:

public static IEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source)

从方法定义中可以看到,这个扩展方法,不需要输入参数,返回一个新集合。需要注意的是,Reverse方法的返回值是void。看下面的例子:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ThenBy{    class Program    {        static void Main(string[] args)        {            string[] str = { "A", "B", "C", "D", "E"};            var query = str.Select(p => p).ToList();            query.Reverse();            foreach (var item in query)            {                Console.WriteLine(item);            }            Console.ReadKey();        }    }}

运行效果:

LINQ排序操作符怎么使用

关于“LINQ排序操作符怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“LINQ排序操作符怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: LINQ排序操作符怎么使用

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

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

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

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

下载Word文档
猜你喜欢
  • LINQ排序操作符怎么使用
    这篇文章主要介绍了LINQ排序操作符怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇LINQ排序操作符怎么使用文章都会有所收获,下面我们一起来看看吧。Linq中的排序操作符包括OrderBy、OrderB...
    99+
    2023-06-29
  • LINQ排序操作符用法
    Linq中的排序操作符包括OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse,提供了升序或者降序排序。 一、Orde...
    99+
    2022-11-13
  • linq中聚合操作符怎么用
    这篇文章给大家分享的是有关linq中聚合操作符怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Aggregate操作符Aggregate操作符对集合值执行自定义聚合运算。来看看Aggregate的定义:p...
    99+
    2023-06-29
  • linq中的限定操作符怎么用
    本篇内容介绍了“linq中的限定操作符怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!限定操作符运算返回一个Boolean值,该值指示序...
    99+
    2023-06-29
  • Linq 中如何使用Contains操作符
    Linq 中如何使用Contains操作符,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。投影和排序您可能还注意到我在之前的示例中暗藏了一个投影。在使用 Max 操作符之前,LI...
    99+
    2023-06-17
  • C#如何使用LINQ查询操作符
    这篇文章主要讲解了“C#如何使用LINQ查询操作符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何使用LINQ查询操作符”吧!连表操作符1、内连接使用 join 子句 根据特定的条件合...
    99+
    2023-07-02
  • C#使用LINQ查询操作符实例代码(一)
    目录相关阅读示例业务背景介绍一、筛选操作符结果:1、索引器筛选2、类型筛选OfType二、投影操作符1、Select 子句结果:相应的lambda表达式:2、复合的From...
    99+
    2022-11-13
  • C#使用LINQ查询操作符实例代码(二)
    目录相关阅读六、连表操作符1、内连接2、左外连接(DefaultIfEmpty)3、组连接七、集合操作八、分区操作符1、Take():2、TakeWhile():3、Skip():4...
    99+
    2022-11-13
  • excel排序依次类推怎么操作
    今天小编给大家分享一下excel排序依次类推怎么操作的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。excel排序1234依次...
    99+
    2023-07-02
  • 使用Kotlin怎么实现操作符与操作符重载
    这篇文章将为大家详细讲解有关使用Kotlin怎么实现操作符与操作符重载,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Kotlin基础教程之操作符与操作符重载Kotlin操作符的使用方法与其他...
    99+
    2023-05-31
    kotlin 操作符重载 操作符
  • PHP 排序函数使用方法,按照字母排序等操作
    详解PHP排序方法使用 一、sort() 函数 用于对数组单元从低到高进行排序。 //数组$data = array('D','F','A','C','B');//排序sort($data);//输出排版标签echo "";//打印数据p...
    99+
    2023-10-20
    php 开发语言
  • 怎么用Python实现字符串排序
    今天小编给大家分享一下怎么用Python实现字符串排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。说明sort()方法对字...
    99+
    2023-06-30
  • 怎么使用JS中new操作符
    这篇文章主要讲解了“怎么使用JS中new操作符”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用JS中new操作符”吧!首先我们来看一下实例化一个对象做...
    99+
    2022-10-19
  • JavaScript的typeof操作符怎么使用
    本篇内容介绍了“JavaScript的typeof操作符怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2022-10-19
  • C++逻辑操作符怎么使用
    本篇内容主要讲解“C++逻辑操作符怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++逻辑操作符怎么使用”吧!一、逻辑运算符的原生语义操作数只有两种值( true和 false )逻辑表...
    99+
    2023-06-30
  • 使用numpy实现topk函数操作(并排序)
    np.argpartition 难以解决topK topK是常用的一个功能,在python中,numpy等计算库使用了丰富的底层优化,对于矩阵计算的效率远高于python的for-l...
    99+
    2022-11-12
  • python中取反操作符怎么使用
    这篇文章主要介绍了python中取反操作符怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中取反操作符怎么使用文章都会有所收获,下面我们一起来看看吧。python取反操作符~ : 按位取反运算...
    99+
    2023-07-05
  • C语言操作符++和--怎么使用
    本篇内容介绍了“C语言操作符++和--怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、++与--操作符的本质++ 和 -- 操作符...
    99+
    2023-06-30
  • typescript中keyof与typeof操作符怎么使用
    这篇文章主要介绍“typescript中keyof与typeof操作符怎么使用”,在日常操作中,相信很多人在typescript中keyof与typeof操作符怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-07-02
  • JavaScript中rxjs与Observable操作符怎么使用
    这篇文章主要讲解了“JavaScript中rxjs与Observable操作符怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中rxjs与Observable操作符...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作