最近做数据查询,发现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(原创)的更多相关文章

  1. ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...

  2. ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...

  3. ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 编辑表单 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 编辑表单 上一章节我们介绍了标签助手和 HT ...

  4. ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 使用 EF 框架查询数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 使用 EF 框架查询数据 上一章节我们学习了如何设置 ...

  5. ASP.NET Core 数据库上下文 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 数据库上下文 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 数据库上下文 上一章节中我们了解了 Entity Framewo ...

  6. ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 路由 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 路由 前两章节中,我们提到 ASP.NET Core 支持 MVC 开发 ...

  7. ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 MVC 前面几章节中,我们都是基于 ASP.NET 空项目 ...

  8. ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 项目配置 ( Startup ) 前面几章节 ...

  9. Asp.Net Core基础篇之:白话管道中间件

    在Asp.Net Core中,管道往往伴随着请求一起出现.客户端发起Http请求,服务端去响应这个请求,之间的过程都在管道内进行. 举一个生活中比较常见的例子:旅游景区. 我们都知道,有些景区大门离景 ...

随机推荐

  1. 变量 + 数据类型(数字 + 字符串)(day03整理)

    目录 一.上节课回顾 四 编程语言分类 (一) 机器语言 (二)汇编语言 (三) 高级语言 (四) 网络瓶颈效应 五.执行python程序两种方式 (一) 交互式(jupytre) (二) 命令行式( ...

  2. python【控制台】小游戏--贪吃蛇

    传统贪吃蛇相信大家都玩过,也是一款很老很经典的游戏,今天我们用python控制台实现 项目有很多bug没有解决,因为本人一时兴起写的一个小游戏,所以只是实现可玩部分功能,并没有花较多的时间和精力去维护 ...

  3. C#开发命令执行驱动程序 之 控制标志的命令行参数

    /// <summary> /// 在cmd窗体内执行如下: /// CtrlOrderDrierApp.exe -f -t /// 返回: /// FOO /// Show Table ...

  4. Flask框架实现给视图函数增加装饰器操作示例

    在@app.route的情况下增加装饰器的写法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  5. 最常用 最完整 最清晰 的git使用命令大全!

    Git 常用命令 初始化项目步骤 mkdir WebApp //创建文件夹 cd WebApp //进入到该文件夹 git init //初始化 touch README //生成README git ...

  6. 防抖(debounce)和 节流(throttling)

    防抖(debounce)和 节流(throttling) 1.防抖和节流出现的原因 防抖和节流是针对响应跟不上触发频率这类问题的两种解决方案. 在给DOM绑定事件时,有些事件我们是无法控制触发频率的. ...

  7. 如何往Spark社区做贡献,贡献代码

    随着社区正在努力准备Apache Spark的下一版本3.0,您可能会问自己“我如何参与其中?”.现在的Spark代码已经很庞大,因此很难知道如何开始自己做出贡献.Spark PMC & Co ...

  8. 这次一定要教会你搭建Redis集群和MySQL主从同步(非Docker)

    前言 一直都想自己动手搭建一个Redis集群和MySQL的主从同步,当然不是依靠Docker的一键部署(虽然现在企业开发用的最多的是这种方式),所以本文就算是一个教程类文章吧,但在动手搭建之前,会先聊 ...

  9. C语言I博客作业04

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-1/homework/9773 我在这个课程的目标 ...

  10. C语言I作业06

    问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/9888 我在 ...