首页 > 编程语言 >重学c#系列——linq(2) [二十八]

重学c#系列——linq(2) [二十八]

时间:2022-12-15 01:11:41浏览次数:43  
标签:26 那么 二十八 c# 张三 linq 排序 order

前言

前文提及到了一些基础的linq的基础,那么这一节是一些补充。

正文

关于一个orderby的问题。

比如我们输入两个order by。

这里告诉我们多个order by是没有意义的,如果多个那么就是最后一个是有意义的。

这里要使用,不要去记最后一个是有意义的,这会让你的思维混乱,记得用一个orderby就好。用完order by之后就可以用then by了。

这里提及一下原理,前面提及到包装器,为什么生效的是最后一个呢。

通过包装成一个OrderedEnumerable:

然后foreach 前文说过其实是调用GetEnumerator:

那么只要最后一个包装才生效。

这里其实是做了优化的,为什么多个order by 只有一个生效,这是符合现实的。

比如一个是前面男生后面女生 ,前面女生后面男生,那么排序只有一个生效,前面的排序都是无效的。

order by之后,要使用then by,这个then by 就是order by排完序之后的排序。

比如order by前面男生后面女生,那么then by 是按照身高进行排序。

那么就是男生从第低到高,女生从低搞到,这样子的排序。

then by 其实也是OrderedEnumerable。

CreateOrderedEnumerable 值得看一下:

看到这个parent,那么应该想到链式结构。

就是通过这种链式结构,完成了这个order by 和 then by。有兴趣可以看一下。数据结构这不就用上了。

有兴趣可以看下。 原理就是上一个排序的时候,如果相等,那么就交给下一个排序进行比较。

张三  26  180

李四  25 180

王哥 27 179

张三  17 175
张三  26  175

orderby(name).thenby(age).thenby(high)

比如就是按照name和age 还有high。

那么首先会得到3个数组:

张三 李四 王哥 张三 张三 
26,25,27,17,26
180,180,179,175,175

那么第一个数组会进行快速排序,当张三 0号 张三 3号相等的时候。

那么就会差第二个数组的0号和3号比较,因为26大17,那么17就排在前面。(order 从小到大)

当张三0号和张三4号相等,然后第二个数组的0号和4号也相等,那么就看第三个数组的0号和4号了。

大致就是这个理论了,其实只是做了一次排序。

下一节为groupjoin和selectmany还有匿名匿名类型linq,下下节为linq表达式。

该系列剩余40余篇,c# IL 阅读在汇编系列之后,为重学c#系列的外篇。

标签:26,那么,二十八,c#,张三,linq,排序,order
From: https://www.cnblogs.com/aoximin/p/16984106.html

相关文章

  • Java Object
    jdk提供的一个类,是所有类的父类,再java.lang中Object类中定义了很多方法hashcode():返回对象的散列码toString():以字符串的形式返回某个类的实例化对象的信息getClass()......
  • 扩展testlv至7G,要求archlinux用户的文件不能丢失
    4.扩展testlv至7G,要求archlinux用户的文件不能丢失lvextend-L7G/dev/testvg/testlv  5.收缩testlv至3G,要求archlinux用户的文件不能丢失[root@192~]#umount......
  • HarmonyOS实现登录页面(五)config.json代码(打开网络权限+去掉顶部lable+改为发送http明
    config.json新增代码:打开网络权限"reqPermissions":[{//打开网络权限"name":"ohos.permission.INTERNET"}]新增代码:去掉上边栏lable"met......
  • Docker学习笔记十一:Docker安装Redis
    下载命令:dockerpullredis安装可参考Docker Hub官网说明的镜像的用法  安装 不挂载目录启动容器创建容器命令:dockerrun-d--name=myredis-p6380:637......
  • JAVA中生成随机数Random VS ThreadLocalRandom性能比较
    前言大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现。实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那么......
  • Nacos-配置管理,分布式,微服务,集群部署
    Nacos-配置管理目录Nacos-配置管理4Nacos配置管理基础应用4.1Nacos配置管理模型4.2命名空间管理4.2.1namespace隔离设计4.2.2命名空间管理4.3配置管理4.2.1配置......
  • Netty中的Decoder和Encoder作用
    什么是编解码器每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和目标应用程序的数据格式做相互转换;这种转换逻辑有编解码器处理,编解码......
  • DHCP snooping
    DHCPSnooping是DHCP的一种安全特性,主要应用在交换机上,作用是屏蔽接入网络中的非法的DHCP服务器。即开启DHCPSnooping功能后,网络中的客户端只有从管理员指定的DH......
  • LeetCode HOT 100:全排列
    题目:46.全排列题目描述:给你一个没有重复元素的数组,返回其所有可能的全排列。全排列是什么呢?举个简单的例子,数组[1,2,3],其中一个排列为[2,1,3],该数组所有的全排列为[......
  • Docker 容器编排
    1、清理和准备上篇文章创建并准备一个镜像#移除容器dockerrm-f$(dockerps-aq)redis默认文件下载上传到/app/redis/redis.conf2、docker-compose.ymlversion......