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 分组
distinct返回null报错_C#之集合常用扩展方法与Linq相关推荐
- distinct返回null报错_distinct
刚布署了的mysql查询报错: this is incompatible with DISTINCT 解决方法: 在mysql 配置文件my.ini 或者my.cnf 里添加: [mysqld] sq ...
- distinct返回null报错_在Java中如何避免“!=null”式的判空语句?
问题描述: 我整天都是在跟Java打交道.我在Java开发中最常用的一段代码就是用object != null在使用对象之前判断是否为空.这么做是为了避免NullPointerException.但是 ...
- distinct返回null报错_mysql中distinct
1.Distinct 位置 单独的distinct只能放在开头,否则报错,语法错误,与其他函数使用时候,没有位置限制如下 Select player_id,count(distinct(task_id ...
- mysql注入报错函数_MySQL注入常用函数
注入的分类 仁者见仁,智者见智. 基于从服务器接收到的响应 ▲基于错误的 SQL 注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL 盲注 •基于布尔 SQL 盲注 •基于时间的 SQL 盲注 •基于报错 ...
- 前端JavaScript 常见的报错及异常捕获与处理方法
前言 在开发中,有时,我们花了几个小时写的js 代码,在浏览器调试一看,控制台一堆红,瞬间一万头草泥马奔腾而来. 至此,本文主要记录js 常见的一些错误类型,以及常见的报错信息,分析其报错原因,并给予 ...
- python https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 解决方法
python爬虫,使用requests库发送https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 解决方法: imp ...
- maven引用servlet_解决Maven 项目报错 java.httpservlet和synchronized使用方法
使用java8 的lanmbe表达式时,使用java1.8编译,则会报错 需要在pom.xml的中添加 org.apache.maven.plugins maven-compiler-plugin 2 ...
- 转)VCSA 6.5重启无法访问,报错“503 Service Unavailable”的解决方法
转)VCSA 6.5重启无法访问,报错"503 Service Unavailable"的解决方法 1. 问题 重启vcenter,登陆vsphere client,提示 &quo ...
- vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)...
vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文) 转载于:https://www.cnblogs.com/ ...
最新文章
- lk中内联调用的dsb()
- [YTU]_1046 ( 输入10个数字,然后逆序输出)
- 不同服务器之间进行传输
- 在几何画板中如何制作圆柱的侧面展开动画_倒计时与时钟演示 | 几何画板
- 如何让自己的写的程序在阿里云一直运行
- 从Maven远程存储库下载
- 使用solrj api操作solr
- 索引超出了数组界限(Microsoft.SqlServer.Smo)
- mysql查询学生成绩语句_SQL查询成绩之精典语句
- 维修电工技师技能实训考核装置QY-W05
- day09、1 - 简单渗透测试流程
- 【数据分析】数据指标
- 浅谈CA与证书以及Openssl管理证书
- jdk-8u271这里的u是什么意思
- 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient)
- 为响应国家号召1+X证书Web前端开发最新考试模拟题
- 使用a标签下载文件而不是直接打开
- Linux系统中read的用法,Linux系统中read的使用技巧
- 快速学习html、css的经典笔记
- springboot2稳定版本_SpringBoot2.2.x 版本CPU增高BUG分析|chu
热门文章
- linux根文件系统 /etc/resolv.conf 文件详解
- linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(上传安装包并解压_05)
- Linux 环境 zookeeper集群安装、配置、测试
- Redis的启动、使用和停止
- 结构损伤检测与智能诊断 陈长征_宿迁厂房安全检测多少钱介绍说明
- matlab 求n 的和,MATLAB求1的阶乘加到n的阶乘和 不要现有的函数,要自己编写出来的...
- 逐鹿工具显示服务器错误连接不上怎么解决,win7系统安装逐鹿工具箱提示“error launching installer”错误的解决方法...
- oracle管理员登录报错,关于Oracle使用管理员账号登录失败的问题
- 窄带语谱图c语言算法,MELP语音编码算法实现及算法改进
- fpgrowth算法实战 mlib_【spark】41.Spark Mlib:FPGrowth算法