C#高级编程(第9版) 第11章 LINQ 笔记
概述
语言集成查询(Language Integrated Query, LINQ)在C#编程语言中集成了查询语法,可以用相同的语法访问不同的数据源。
LINQ提供了不同数据源的抽象层,所以可以使用相同的语法。
本章介绍LINQ的核心原理和C#中支持C#LINQ查询的语言扩展。
列表和实体
LINQ查询
eg:
var query = from r inFormua1.GetChampions()
where r.Country == "Brazil"
orderby r.wins descending
select r;
子句form、where、orderby、descending和select都是这个查询中预定义的关键字。
查询表达式必须以from子句开头,以select或group子句结尾。这两个子句之间,可以使用where、orderby、join、let和其它from子句。
query变量只是制定了LINQ查询。该查询不是通过这个赋值语句执行的。只要使用foreach循环访问查询,该查询就会执行。
扩展方法
编译器会转换LINQ查询,以调用方法而不是LINQ查询。
LINQ为IEnumerable<T>接口提供了各种扩展方法,以便用户实现了该接口的任意集合上使用LINQ查询。
扩展方法可以将方法写入最初没有提供该方法的类中。还可以把方法添加到实现某个特定接口的任何类中,这样多个类就可以使用相同的实现代码。
定义LINQ扩展方法的一个类是System.Linq命名空间中的Enumerable。只需要导入这个命名空间,就打开了这个类的扩展方法的作用域。
推迟查询和执行
在运行期间定义查询表达式时,查询就不会运行,查询会在迭代数据项时运行。
扩展方法Where()使用yield return语句返回谓词为true的元素。因为使用了yield return语句,所以编译器会创建一个枚举器,在访问枚举中的项后,就返回它们
标准的查询操作符
下表列出了Enumerable类定义的标准查询操作符:
筛选
并不是所有的查询都可以用LINQ查询方法完成。也不是所有的扩展方法都映射到LINQ查询子句上。
高级查询使用扩展方法。
用索引筛选
不能使用LINQ查询的一个例子是Where()方法的重载。
在Where()方法的重载中,可以传递第二个参数 ----- 索引。
索引是筛选器返回的每个结果的计数器。
类型筛选
可以使用OfType()扩展方法,基于类型进行筛选。
复合的from子句
C#编译器把复合的from子句和LINQ查询转换为SelectMany()方法。
排序
分组
对嵌套的对象分组
内连接
左外连接
组连接
结合操作
合并
分区
聚合操作符
转换操作符
生成操作符
并行LINQ
System.Linq命名空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上。
尽管Enumerable类给IEnumerable<T>接口定义了扩展方法,但ParallelEnumerable类的大多数扩展方法是ParallelQuery<TSource>类的扩展。
并行查询
分区器
取消
表达式树
在LINQ to Objects中,扩展方法需要将一个委托类型作为参数,这样就可以将lambda表达式赋予参数。lambda表达式也可以赋予Expression<T>类型的参数。C#编译器根据类型给lambda表达式定义不同的行为。如果类型是Expression<T>,编译器就从lambda表达式中创建一个表达式数,并存储在程序集中。这样,就可以在运行期间分析表达式树,并进行优化,以便于查询数据源。
LINQ提供程序
.NET包含几个LINQ提供程序。
LINQ提供程序为特定的数据源实现了标准的查询操作符。
小结
本章讨论了LINQ查询和查询所基于的语言结构,如扩展方法和lambda表达式,还列出了各种LINQ查询操作符,不仅用于筛选数据源,给数据源排序,还用于执行分区、分组、转换、连接等操作。
使用并行LINQ可以轻松地并行化运行时间较长的查询。
另一个重要的概念是表达式树。
表达式树允许在运行期间构建对数据源的查询,因为表达式树存储在程序集中。
还可以下载其它第三方提供程序,例如: LINQ to MySQL、LINQ to Amazon、LINQ to Flickr、LINQ to LDAP和LINQ to SharePoint等。无论使用什么数据源,都可以通过LINQ使用相同的查询语法进行操作。
C#高级编程(第9版) 第11章 LINQ 笔记的更多相关文章
- 【转】apue《UNIX环境高级编程第三版》第一章答案详解
原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此 ...
- C#高级编程 (第六版) 学习 第二章:C#基础
第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...
- C#高级编程 (第六版) 学习 第一章:.Net体系结构
第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...
- ASP.NET MVC 4高级编程(第4版)
<ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway Phil Haack Brad Wilson K. Scott All ...
- 《UNIX环境高级编程(第3版)》
<UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...
- Linux - Unix环境高级编程(第三版) 代码编译
Unix环境高级编程(第三版) 代码编译 本文地址:http://blog.csdn.net/caroline_wendy 时间:2014.10.2 1. 下载代码:http://www.apuebo ...
- C#高级编程第9版 阅读笔记(一)
一.前言 C# 简洁.类型安全的面向对象的语言. .NET是一种在windows平台上编程的架构——一种API. C#是一种从头开始设计的用于.NET的语言,他可以利用.NET Framework及其 ...
- Unix环境高级编程第三版中实例代码如何在自己的linux上运行的问题
学习Linux已经有2个月了,最近被期末考试把进度耽误了,前几天把Unix环境高级编程看了两章,感觉对Linux的整体有了一些思路,今天尝试着对第一章涉及到的一个简单的交互式shell编译运行一下,结 ...
- c#高级编程第七版 学习笔记 第一章 .NET体系结构
第一章 .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...
随机推荐
- Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)
最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...
- sqli-labs level 2
来到第第二关 首先在后面添加一个 单引号看下报错信息 发现这里多多了一个引号 尝试去掉单引号看下回显结果 : and 1=2 可以发现这里不需要添加单引号进行闭合,可以直接控制,所以接下来 ...
- Redis Cluster 获取主从关系
redis-cli -h 192.168.11.111 -p 6380 -c cluster slots | xargs -n8 | awk '{print $3":"$4&qu ...
- chrome警告:Synchronous XMLHttpRequest on the main thread
警告 原因 ajax同步请求会触发此警告 分析 这段英文翻译:主线程上的同步XMLHttpRequest不受欢迎,因为它对最终用户的体验有害: ajax同步,在向后台请求的过程中,前台代码执行会停留在 ...
- SSM 整合配置以及一个简单登陆案例(个人记录)
SSM 文件以及大部分参考博客 https://blog.csdn.net/qq598535550/article/details/51703190 简答的登陆注册案例下载链接在末尾补贴图了 我建立的 ...
- 【学CG系列】web之审查元素
一.审查元素的作用 审查元素(你的F12)可以做到定位网页元素.实时监控网页元素属性变化的功能,可以及时调试.修改.定位.追踪检查.查看嵌套 ,修改样式和查看js动态输出信息,是开发人员得心应手的好工 ...
- NOR Flash驱动
驱动程序 1 ] ] );81 ;83 }84 85 86 static void __exit nor_exit(void)87 {88 iounmap(nor_ ...
- 51nod 1294 :修改数组 && HDU 5256:序列变换
1294 修改数组 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 取消关注 给出一个整数数组A,你可以将任何一个数修 ...
- HihoCoder第八周:状态压缩 一
1044 : 状态压缩•一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前 ...
- asp.net mvc3用file上传文件大小限制问题
在Windows2008下,如果上传比较大的文件,可能会出现404错误,(请求筛选模块被配置为拒绝超过请求内容长度的请求). 可通过如下方法解决: 打开URTracker根目录下的web.config ...