23.C#Queryable的扩展方法(十二章12.1-12.2)

  今天要写的知识还真心有点绕呢,对于第一节的内容,其实是把原先在内存中的数据源,换成了从数据库中提取出来的数据。从代码的使用方式上是一样的,直接跳过,来看看IEnumerable和IQueryable的区别。

  正如Enumerable类型包含着关于IEnumerable<T>的扩展方法来实现LINQ标准查询操作符一样,Queryabl类型包含着关于IQueryable<T>的扩展方法。IEnumerable<T>和IQueryable<T>有两个重要的区别。

  首先IEnumerable<T>的方法都使用委托作为参数,例如,Select方法使用Func<TSource,TResult>。这对于内存中的操作是没有问题的,但对于别处执行查询的LINQ提供器来说,我们需要能执行更详细检查的格式--表达式树。例如,Queryable中相应的Select的重载就要获取类型为Expression<Func<TSource,TResult>>的参数。编译器根本不会关心这些--在查询编译之后,它具有一个需要作为参数传递给方法的Lambda表达式,而Lambda表达式即可以被转换成委托实例,也可以转换成表达式树。如图中的表示,会根据数据源选择相应的重载。

  选择两种路径的查询,具体使用哪个路径取决于数据源实现的是IQueryable接口还是IEnumerable接口。

  当我们将Lambda表达式传入作为参数时,Lambda表达式即可以转换成委托实例,也可以转换成表达式树实例,左边的路径用于执行内存中的操作,而右边路径用于来在数据库中执行SQL。

  Queryable和Enumerable之间的第2个重大差别,Enumerable的扩展方法会完成与对应查询操作符相关的实际工作(至少会构建完成这些工作的迭代器)。例如,Eumerable.Where中的代码执行相关的过滤操作,并在结果序列中生成适当的元素。通过比较,Queryable中的查询操作符的"实现"做的事情非常少。

  • IQueryable<T>和相关接口的介绍

  IQueryable<T>是从IEnumerable<T>和非泛型的IQueryable继承而来,而IQueryable又继承于非泛型IEnumerable,IQueryable仅有三个属性:QueryProvider、ElementType和Expression。理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。从LINQ的角度来看,由于是通过IQueryable的Expression属性返回结果,所以查询的详细信息就保存于表达式树中。

  请大家给出深入见解,学习一二,斧正。

时间: 2024-07-30 03:23:44

23.C#Queryable的扩展方法(十二章12.1-12.2)的相关文章

Python编程快速上手让繁琐工作自动化 第十二章实践项目12.13.3 电子表格单元格翻转程序

代码如下: 原文地址:https://blog.51cto.com/lisiyun/2388316

第十二章类的无参方法

一.javaDoc注释: 语法:/** * *@author FLC */ 生成javaDoc文档的步骤:点击File--Export--展开java文件夹--选择javaDoc--点击Next--制定生成doc文档的文件位置--点击Fish--找到生成文件位置查看. 二.类中的方法: 语法:   访问修饰符  方法返回值类型  方法名称(){} 例如: public void run(){ } public String ball(){ } String ball="球"; retu

Testlink1.9.17使用方法(第十二章 总结)

第十二章 总结 QQ交流群:585499566 TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,我们可以将测试过程从:测试需求.测试设计.到测试执行.完整的管理起来,同时,它还提供了好多种测试结果的统计和分析,使我们能够简单的开始测试工作和分析测试结果. 原文地址:https://www.cnblogs.com/1fengchen1/p/9403587.html

进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量.所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来

perl5 第十二章 Perl5中的引用/指针

第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句柄的引用 一.引用简介    引用就是指针,可以指向变量.数组.哈希表(也叫关联数组)甚至子程序.Pascal或C程序员应该对引用(即指针)的概念很熟悉,引用就是某值的地址,对其的使用则取决于程序员和语言的规定.在Perl中,可以把引用称为指针,二者是通用的,无差别的.引用在创建复杂数据方面十分有用

第二十二章 TCP/IP层的实现

                      第二十二章    TCP/IP层的实现        我比较喜欢先难后易,如果把GPU显示管理.和网络管理拿下后:我会从头整理.改写一遍APO操作系统.这样,就会形成APO操作系统的锥形.也获得了全局观.内核CPU线路.和用户CPU线路,你可以将它们看成是独立的2个32位CPU核:内核CPU主要任务是实时处理.硬件中断,256个实时线程包含了一些中断程序的后半部.用户CPU主要是动态优先级进程.线程调度,各种应用程序的运行:2个核之间是通过消息交互.句

第十二章 APO编程语言

第十二章      APO编程语言 APO编程语言是基于汇编语言和面向对象编程.基本指令只有7种:赋值指令.COPY指令.BTX(位X测试为1.或0转移)指令.查表跳转指令switch(RN){-.}.移位与循环指令S.三操作数运算指令.调用与返回指令.所有的指令大小.除了32位立即数赋值是2字外:其它都是32位,一个字. 指令执行时间,除了32位立即数赋值是2ns.COPY指令取决于拷贝的长度外:其它指令都是1ns. 应用程序只能使用R0-R4,R8-R15的21个寄存器作为高速的寄存器局部变

Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!

Java学习笔记—第十二章 Java网络编程入门

第十二章  Java网络编程入门 Java提供的三大类网络功能: (1)URL和URLConnection:三大类中最高级的一种,通过URL网络资源表达方式,可以很容易确定网络上数据的位置.利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端. (2)Socket:又称"套接字",用于描述IP地址和端口(在Internet中,网络中的每台主机都有一个唯一的IP地址,而每台主机又通过提供多个不同端口来提供多种服务).在客户/服务器网络中,当客