c#、ASP.NET core 基础模块之一:linq(原创)
最近做数据查询,发现linq 真的比我 印象中 要强大的多,实用的多,所以 我决定 要与linq 来一场 深入交流,
因为linq的基础用法 可以百度一大摞,我就记录点不一样的,结合我做项目使用的。
什么是linq?
linq(Language Integrated Query, 语言集成查询)
优点:1)linq提供了不同数据源的抽象层,所以可以使用相同的语法访问不同的数据源
2)linq在一定程度上降低了访问数据的复杂度(对于这点深有感触)
3)linq在编译的时候就进行检查,而不是在运行时。这样 语法错误可以及时修正
4)linq 定义的查询表达式 不是立即执行的,是在迭代中执行的(当然有扩展方法可以让其立即执行)。
这样 我们就可以把复杂的查询语句分开,而不用担心查询的效率。
缺点:1)linq 是语法糖,最终还是会转化为sql 语句 ,这点会影响一点点性能,一般情况下 可忽略
2)linq对 几百行的sql 无能为力,对于上百万的 数据 就歇菜了
3)linq使用的多了,容易让程序员“忘本”,不在关心SQL语句怎么写的。
linq 的 功能(记录部分):
1、筛选、索引筛选 、类型筛选
//简单的筛选就是where,这里就不做记录
//这里举例 索引筛选
//说明:在Where()方法的重载中,可以传递第二个参数-索引。索引是筛选器返回的每个结果的计数器。
//并且可以在表达式中使用这个索引,执行基于索引的计算。 //使用索引返回姓氏J开头、索引为偶数的 名字
var nameList = new List<string> { "Nice", "Juer", "Jerry", "Kerry", "Amber", "Iort" };
var result = nameList.Where((r, index) => r.StartsWith("J") && index % == );
foreach (var item in result) {
Console.WriteLine(item);
}
输出结果:Jerry
//基于类型筛选 OfType()
object[] data = { "Kerry",,"Ambin",,}; var query = data.OfType<string>();
foreach (var item in query) {
Console.WriteLine(item);
}
//输出结果:Kerry Ambin
2、复合的from子句
//复合的from子句 说明 student是一个类,这个类中有一个对象grade
var data = from r in stuednt
from c in r.grade
select r;
3、排序、分组、聚合操作(这个案例来源于项目需求)
//需求:查询一张表中,以发票种类(4种)和异常状态(5种) 作为一组,
//分析每种可能性的 各个发票种类和各个异常状态下的总张数
//结果展示 总共有20种
//排序(orderby)、分组(group by)
//说明:fapList:发票表信息 AbnormalReason和InvoiceType 都是自己定义的枚举
var data = from a in fapList
where a.Yiczt != AbnormalReason.All && (a.Fapzl == InvoiceType.VatOrdinary ||
group a by new { a.Fapzl, a.Yiczt } into g
orderby g.Key.Fapzl
select new {
g.Key.Yiczt,
g.Key.Fapzl,
Shuie = g.Sum(u => u.Shuie),
jine = g.Sum(u => u.Jine),
zhuangyfpCount = g.Count(u => u.Fapzl == InvoiceType.VatSpecial),
putfpCount = g.Count(u => u.Fapzl == InvoiceType.VatOrdinary),
dianzfpCount = g.Count(u => u.Fapzl == InvoiceType.VatElectronicOrdinary),
jidcfpCount = g.Count(u => u.Fapzl == InvoiceType.VatMotorSpecial),
toatlCount = g.Count()
};
4、对嵌套的对象分组
///对嵌套的对象分组
///说明:query:表一数据 query2:表二数据 表一的id对应表二的Fapid 表一和表二的关系:一对多
///需求:将表二中对应表一记录的 最新一条记录 组合到表一中并展示出来
var result = from r in query
select new {
r.Faphm,
r.Fapzl,
r.Fapdm,
r.Id,
chayjlist = (from t in query2
where t.Lslx == HistoryType.Check && t.Fapid == r.Id
orderby t.CreationTime descending
select new {
t.Chaycg,
t.Jiegms,
t.Jiegnr,
t.Chaycs,
t.CreationTime
}).Take()
};
5、内连接、左外连接、组连接
//左外连接:返回左边序列的全部数据(内连接在此不举列子,组连接用得少,也不在此举列子,以后有时间在专门记录)
var str = from r in query1
join t in query2 on r.Id equals t.Fapid into rt
from t in rt.DefaultIfEmpty()
select new {
r.Fapdm,
r.Faphm
};
6、集合操作:Distinct()、Union()、Intersect()、Except()
参考这个:https://www.cnblogs.com/fengxiaojiu/p/7886885.html
7、合并
Zip() 方法允许用一个谓词函数将两个线管的序列合并为一个。
8、并行LINQ
AsParallel(): 处理大数据 大型集合 会占用多个CPU
9、取消
WithCancellation():用于取消长时间运行的任务
学以致用,慢慢进步
c#、ASP.NET core 基础模块之一:linq(原创)的更多相关文章
- ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...
- ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...
- ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...
- ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 使用 EF 框架查询数据 上一章节我们学习了如何设置 ...
- ASP.NET Core 数据库上下文 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 数据库上下文 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 数据库上下文 上一章节中我们了解了 Entity Framewo ...
- ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 路由 前两章节中,我们提到 ASP.NET Core 支持 MVC 开发 ...
- ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 MVC 前面几章节中,我们都是基于 ASP.NET 空项目 ...
- ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 项目配置 ( Startup ) 前面几章节 ...
- Asp.Net Core基础篇之:白话管道中间件
在Asp.Net Core中,管道往往伴随着请求一起出现.客户端发起Http请求,服务端去响应这个请求,之间的过程都在管道内进行. 举一个生活中比较常见的例子:旅游景区. 我们都知道,有些景区大门离景 ...
随机推荐
- 04 python学习笔记-函数、函数参数和返回值(四)
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.Python提供了许多内建函数,比如print(),我们也可以自己创建函数,这叫做用户自定 ...
- 用Java JMC控制台分析线程阻塞原因
问题 今天在玩dianping-CAT框架时,发现请求某个页面的时候,发生了阻塞.浏览器得不到响应. 环境 本地Tomcat 8 , Windows 系统. 解决 启动jmc 控制台,找到BLOCKE ...
- 分享一次大厂的技术面试通过,却因学历被拒发 offer 的悲惨经历
概述 今天心情很down,快周末了,说点不开心的事情给大家开心一下,上周面试心仪已久的大厂,技术面很顺利的通过一面/二面/三面,最后到HR面也很顺利,然后被问到学历(自考本科)后,HR 语气发生一些转 ...
- [随机化算法] 听天由命?浅谈Simulate Anneal模拟退火算法
Simulate Anneal模拟退火算法,是一种用于得到最优解的随机化算法. 如果可以打一手漂亮的随机化搜索,也许当你面对一筹莫展的神仙题时就有一把趁手的兵器了. 这篇题解将教你什么?SA的基本思路 ...
- Redis(十二)flush误操作、Redis安全、处理bigkey和寻找热点key
一.flushall/flushdb误操作的处理 假设进行flush操作的Redis是一对主从结构的主节点,其中键值对的个数是100万,每秒写入量是1000. 1.缓存与存储 被误操作flush后,根 ...
- Spring Cloud alibaba网关 sentinel zuul 四 限流熔断
spring cloud alibaba 集成了 他内部开源的 Sentinel 熔断限流框架 Sentinel 介绍 官方网址 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentine ...
- 阿里六面,挂在hrg,我真的不甘心!
前言最近跟一位朋友聊天,福报场-阿里是大部分程序员的梦想.这位老哥梦想进入阿里很久了,连续两年面试阿里不同bu,有几次是技术面挂,最冤的一次是技术6面了,连P10大老板都面了,但是挂在了hrg. 我以 ...
- HDU5950 矩阵快速幂(巧妙的递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f[n] = 2*f[n-2] + f[n-1] + n^4 思路:对于递推题而言,如果递 ...
- 我的【Java】面试日记
背景 在老东家五年了,总共工作整七年,经历两家公司.2019-10-31日离职.公司规模较小,项目压力不大,非985/211毕业,统招本科,计算机专业.目标:中大型公司,最好是大厂,嘿嘿,不过不抱希望 ...
- SVD分解
首先,有y = AX,将A看作是对X的线性变换 但是,如果有AX = λX,也就是,A对X的线性变换,就是令X的长度为原来的λ倍数. *说起线性变换,A肯定要是方阵,而且各列线性无关.(回想一下,A各 ...