distinct返回null报错_C#之集合常用扩展方法与Linq

一、集合的常用扩展方法(lambda的方式)

1.Where() 根据条件选择数据

2.Select() 根据数据条件转换成新的数据类型,类似于DTO转换类

3.Max() 根据条件选择最大值

4.Min() 根据条件选择最小值

5.OrderBy() 根据条件升序排序

如果升序中Id都为1,那么就根据第二个条件进行升序排序,使用ThenBy

ThenByDescending()紧接着倒序排序

6.First() 获取第一个(如果不存在则报错)

7.FirstOrDefault() 获取第一个,如果不存在则返回null或默认值

8.Single() 获取唯一一个,如果没有或者多个则报异常

9.SingleOrDefault() 获取唯一一个,如果没有则返回默认值,如果多个则报错

10.Any() 判断集合中是否包含元素,如果有返回true,否则返回false。一般比Count效率高。因为Any()只要查询到数据就返回,Count是统计数据的数量。Any还可以指定条件表达式。

11.Distinct() 去除重复数据

(1)int类型的集合:List。

(2)string类型的集合:List

(3)对于自定义类的集合去重复

使用Linq中Distinct方法内进行比较的是对象引用,判断的是对象是否引用同一个对象,而不是对象的属性。因此我们使用对象集合使用Distinct方法时要使用重载

Distinct(this IEnumerable source, IEqualityComparer comparer);

要使用这个方法,重写IEqualityComparer接口,再使用Distinct方法:

由于直接获取对象的HashCode,用HashCode进行比较的速度比Equals方法更快,因此IEqualityComparer内部会再使用Equals前先使用GetHashCode方法,再两个对象的HashCode都相同时即判断对象相同。

而当两个对象HashCode不相同时,Equals方法就会被调用,对要比较的对象进行判断。由于在List集合中两个引用实际上是两个不同的对象,因此HashCode必定不相同,所以要触发Equals方法,只需要改GetHashCode,让它返回相同的常量。

12.Skip(n)跳过前n条数据,Take(m)获取最多m条数据,如果不足m条也不会报错。

13.Except(item1) 排除当前集合中在item1中存在的数据。

如果是自定义集合,需要同Distinct方法一样实现IEqualityComparer接口

14.Union(item1)把当前集合和item中元素组合(求并集)

自定义集合实现IEqualityComparer

15.Intersect(item1) 把当前集合和item中元素求交集

16.GroupBy() 分组(其中Key值是分组返回值)

按照string类型进行返回值

17.SelectMany() 把集合中每个对象的集合属性的值重新拼接为一个新的集合(不能去除重复数据)

18.Join() 联合查询(可以查询两个表某个属性相同的数据)

使用扩展方法,本人只找到添加一个条件查询,没有找到添加多个条件查询,但是使用Linq方式的Join可以使用添加多个条件查询。

二、Linq写法

上面介绍的是lambda的方式写的,下面介绍的是Linq的写法。两种方法可以相互替代,没有哪个好哪个坏的区别。在编译器编译的时候,使用Linq的写法最终都被编译成了lambda的方式的写法(通过反编译工具可以看出)

建议:需要join等复杂用法的时候Linq更易懂,一般的时候lambda方式的写法更清晰、紧凑。同时这两种写法可以混合书写。

必须是:from 变量 in 集合,并且是select xxx结尾

1.Where(s=>s.Id>2)写法:

2.Select(s=>new GetData(){Id=s.Id,Name=s.Name})写法:

3.OrderBy(s=>s.Id). ThenBy(s=>s.Name.Length);写法

4.Join联合查询(两个集合的条件判断相等不能使用”==”,而是使用equals)

一个条件的联合查询

多个条件查询

5.group by 分组

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python tts 保存_Python 文件和目录操作学习

文件与文件路径文件有两个关键属性:文件名和路径。路径指明了文件在计算机上的位置。文件名中,最后一个句点之后的部分称为文件的“扩展名”,它指出了文件的类型目录也叫文件夹,文件夹可以包含文件和其他文件夹路径分隔符在 Windo…

图片 过度曝光_解读:摄影初学者,如何理性处理“曝光不足”与“曝光过度”...

曝光是摄影的基本要素之一,但是许多摄影初学者在曝光不足和过度曝光的问题上经常会遇到很多的困扰,甚至完全不知道如何处理这些问题。其实知道如何获得正确的曝光,并不是你了解曝光过度和曝光不足照片区别的唯一原因。因为创造性的表达比技术…

win7电脑误删鼠标键盘驱动_鼠标键盘,教您怎么解决键盘和鼠标失灵的问题

有的时候在我们使用电脑的过程中会突然间有键盘鼠标失灵的情况发生,而我们都是不明所以、不知所措的。对此,小编我给你们找了解决方法。接下来,就让我们一起往下看看关于键盘鼠标失灵的解决方法吧。键盘和鼠标都是电脑的重要组成部分&#xf…

airpods删除别人的配对_怎么不让别人连我的airpods

airpods很容易就被朋友拿混了,到时候分不清自己的airpods耳机是一件很尴尬的事情。那么,airpods如何避免和别人混拿?不拿出来是最好的解决办法,也可以提前设置不让别人连我的airpods,这样是最靠谱的方法。怎么不让别人…

jmeter安装包双击没反应_windows环境下Jmeter5.2的安装使用

标签:target 首页 环境变量 百度搜索 bsp nbsp htm targe oracl一、安装配置JDKJmeter5.2依赖JDK1.8 版本,JDK安装百度搜索JAVA下载JDK,地址:https://www.oracle.com/technetwork/java/javase/downloads/index.ht…

php把中文写入mysql_php写入mysql中文乱码的实例解决方法

php写入mysql出现中文乱码的解决办法是:在建立数据库连接之后,将该连接的编码方式改为中文。代码如下:$linkIDmysql_connect("localhost","root","admin");if(!$linkID){echo "数据库连接失败&#xff01…

mysql 导入.sql文件_MySQL导入.sql文件及常用命令

MySQL导入.sql文件及常用命令在MySQL Qurey Brower中直接导入*.sql脚本,是不能一次执行多条sql命令的,在mysql中执行sql文件的命令:mysql> source d:/myprogram/database/db.sql;另附mysql常用命令:一) 连接MYSQL&#xff…

mysql ubuntu 17.04_1、mysql 5.7 ubuntu17.04

系统:ubuntu17.04数据库主要分文档型和服务型两类:文档型:如sqlite3 (17.04自带/usr/bin/sqlite3)就是一个文件,应用在移动端如手机,pad,家电等服务型:如mysql有服务端(存储数据)和客户端mysql数…

mysql 查询倒数第二条记录_MySQL查询倒数第二条记录实现方法

有时候会用到查询倒数第二条记录lastHolderChangeHistory.find_by_sql([" SELECT * FROM holder_change_historieswhere treasure_id ?order by id desclimit 1,1 ",hch.treasure_id])select *from tablename awhere (select count(*)f…

kafka和mysql内存机制_一文五分钟让你彻底理解Kafka架构原理

对于kafka的架构原理我们先提出几个问题?1.Kafka的topic和分区内部是如何存储的,有什么特点?2.与传统的消息系统相比,Kafka的消费模型有什么优点?3.Kafka如何实现分布式的数据存储与数据读取?一、Kafka架构图1.kafka名词解释在一套kafka架构中有多个P…

centos mysql 互为主从_centos7 mysql互为主从+keepalived

一、互为主从配置1.1、资源情况192.168.11.177 server1192.168.11.180 server2192.168.11.210 VIP1.2、server1配置# vi /etc/my.cnf[mysqld]server-id1log-binmysql-binrelay_logmysql-realy-binrelay_log_indexslave-mysql-realy-bin.indexexpire_logs_days15binlog_formatmi…

手机apk签名工具安卓版_小飞鱼APK签名工具使用方法

小飞鱼APK签名工具是小飞鱼旗下的一款APK签名软件。是移动开发者必备的一款软件。使用方法1、双击运行小飞鱼APK签名工具.exe文件,出现如下界面:2、点击“功能”,没有签名证书的选择证书制作,制作完证书再选择APK签名,有证书的直接…

React 路由传参

引言 在上一篇中&#xff0c;我们学习了 React 中使用路由技术&#xff0c;以及如何使用 MyNavLink 去优化使用路由时的代码冗余的情况。 这一节我们继续上一篇 React 路由进行一些补充 1. Switch 解决相同路径问题 首先我们看一段这样的代码 <Route path"/home&q…

mysql 5.5 client 字符集_rhel4 mysql5.5 字符集_character set

和oracle字符集一样,有些晕,太细了小结:1,字符集分为:服务器,数据库,表,连接,列等对应参数为:mysql> show variables like chara%;------------------------------------------------------| Variable_name | Value |---------------------…

mysql heartbeat lvs_mysql+heartbeat+DRBD+LVS实现mysql高可用二

上一节&#xff0c;讲述了DRBD的安装&#xff0c;因为要利用heartbeatDRBDmysql实现mysql的高可用&#xff0c;所以这一节讲述安装mysql和heartbeat的安装分别在各个节点安装mysql&#xff0c;文本使用的是二进制的安装包mysql-5.5.33-linux2.6-x86_64.tar.gz[rootdrbd1 usr]# …

mysql 嵌入式 性能_database – 在mySQL中优化嵌入式SELECT查询

好的,这是我现在正在运行的一个查询,它有45,000条记录,大小为65MB ……并且即将变得越来越大(所以我也要考虑未来的性能)&#xff1a;SELECT count(payment_id) as signup_count,sum(amount) as signup_amountFROM payments pWHERE tm_completed BETWEEN 2009-05-01 AND 2009-0…

mysql执行语句后回退_MySQL命令学习笔记(八)

1 安全管理1.1 访问控制MySQL服务器的安全基础是&#xff1a; 用户应该对他们需要的数据具有适当的访问权&#xff0c;既不能多也不能少1.2 管理用户MySQL用户账号和信息存储在名为mysql的MySQL数据库中。获得所有用户账号列表时&#xff0c;可使用以下代码&#xff1a;USE mys…

mysql怎样dao出数据库_mysql怎么导出数据库?

mysql怎么导出数据库&#xff1f;下面本篇文章就来给大家介绍3种mysql导出数据库的方法&#xff0c;希望对你们有所帮助。mysql导出数据库的方法&#xff1a;方法一cmd 到mysql bin目录下用如下命令&#xff1a;mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-…

mac 安装mysql怎么卸载不干净_CleanMyMac卸载不干净怎么办?如何彻底删除Mac上的CleanMyMac?...

CleanMyMac for mac是非常受欢迎的系统清理、软件卸载软件&#xff0c;但是想要卸载CleanMyMac的有些用户发现不能完全卸载&#xff0c;那么CleanMyMac卸载不干净怎么办&#xff1f;如何彻底删除CleanMyMac&#xff1f;这里带来两种可以彻底删除CleanMyMac的方法&#xff0c;有…

mysql判断是否为null_MySQL如何判断字段是否为null

相信很多用了MySQL很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 我字段类型是not null,为什么我可以插入空值 为什么not null的效率比null高 判断字段不为空的时候,到底要 select * from table where column <> 还是要用 select * from table w…