IQueryable接口与IEnumberable接口的区别
简单解释一下:从网上看到IQueryable接口与IEnumberable接口的区别,都是简单的说了一下下面第一点的原因,没有实际的代码,我就简单的在叙述一下其区别的详细的过程。
1:这是从网上找的区别的原因,好多都是这同样的解释:
IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
2:我设置一个查询,代码如下:
//返回IEnumerable开始
var set3 = (from c in db.cms_certificateDetails select c).OrderByDescending(c => c.id).AsEnumerable()
.Skip(150).Take(10);
foreach (var cmsCertificateDetailse in set3)
{
Console.WriteLine(cmsCertificateDetailse.czry + ";" + cmsCertificateDetailse.kddh + "\r\n");//打印结果
}
用sql server profiler监视的sql如下:
SELECT
[Extent1].[id] AS [id],
[Extent1].[kddh] AS [kddh],
[Extent1].[czry] AS [czry],
[Extent1].[yjnr] AS [yjnr],
[Extent1].[tjTime] AS [tjTime],
[Extent1].[bz] AS [bz],
[Extent1].[forId] AS [forId]
FROM [dbo].[cms_certificateDetails] AS [Extent1]
ORDER BY [Extent1].[id] DESC
//返回IEnumerable结束
//返回IQueryable开始
var set4 = (from c in db.cms_certificateDetails select c).OrderByDescending(c => c.id).AsQueryable()
.Skip(150).Take(10);
foreach (var cmsCertificateDetailse in set4)
{
Console.WriteLine(cmsCertificateDetailse.czry + ";" + cmsCertificateDetailse.kddh + "\r\n");//打印结果
}
用sql server profiler监视的sql如下:
SELECT TOP (10)
[Extent1].[id] AS [id],
[Extent1].[kddh] AS [kddh],
[Extent1].[czry] AS [czry],
[Extent1].[yjnr] AS [yjnr],
[Extent1].[tjTime] AS [tjTime],
[Extent1].[bz] AS [bz],
[Extent1].[forId] AS [forId]
FROM ( SELECT [Extent1].[id] AS [id], [Extent1].[kddh] AS [kddh], [Extent1].[czry] AS [czry], [Extent1].[yjnr] AS [yjnr], [Extent1].[tjTime] AS [tjTime], [Extent1].[bz] AS [bz], [Extent1].[forId] AS [forId], row_number() OVER (ORDER BY [Extent1].[id] DESC) AS [row_number]
FROM [dbo].[cms_certificateDetails] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 150
ORDER BY [Extent1].[id] DESC
//返回IQueryable结束
3:这下就看出来了,返回IQueryable类型的方法,执行条件查询是放到数据库中的,返回到内存的数据是已经过滤的,然而返回IEnumerable类型的方法,执行条件肯定是从内存中进行过滤的,返回到内存的数据是没有经过过滤的!
转载于:https://www.cnblogs.com/LpRightNow/p/3680162.html
IQueryable接口与IEnumberable接口的区别相关推荐
- 抽象类(abstract class)和接口(Interface)的区别
抽象类(abstract class)和接口(Interface)的区别 前言 抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予 ...
- Android --- Serializable 接口与 Parcelable 接口的使用方法和区别,怎么选择?
文章目录 一.前言: 二.Serializable 接口 三.Parcelable 接口 四.两种接口怎么选择 一.前言: 本节主要讲解 IPC 中的基本概念,Serializable 接口与 Par ...
- Android中的Parcelable接口和Serializable用法和区别
Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...
- axios请求接口http_使用axios请求接口,几种content-type的区别详解
axios的使用 安装(一般使用框架的话, 脚手架都集成了) $ npm install axios 请求示例 // POST axios.post('/user', { firstName: 'Fr ...
- USB-A接口和USB-B接口有什么区别?
参考文章:USB A接口和B接口具体有什么区别
- java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)
1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...
- (读书随笔)接口和抽象类的一些区别总结
自己写的笔记 最近看"图灵"出版的一本<Java设计模式>的书,小感慨了一下,还是外国人写的好,对接口和抽象类进行一些总结 1.一个类可以实现多个接口,但是只能扩展一个 ...
- 配置静态路由下一跳为本地出战接口和IP地址的区别
配置静态路由下一跳为本地出战接口和IP地址的区别 在配置静态路由时,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口.在点对点的网络中,两者可能没有什么差别,但在以太网中或者NBMA网 ...
- Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)
前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...
最新文章
- 卧槽!Python学习神器!!!
- 负数对2取余_不同语言的负数取余问题
- 列出所有K个元素的子集-----2013年1月26日
- 《Python学习之路 -- 字符串的方法》
- Android 系统(197)---USB VID
- WorldFirstClassOnline
- jQuery实时校验输入框:整数、浮点数
- 【飞行器】基于matlab GUI四旋翼飞行器PID控制仿真【含Matlab源码 1279期】
- 麒麟V10系统密码策略修改
- okhttp实现连接池原理
- 隐形缝针法_裤腰大了怎么改小的隐形针法
- 学习笔记3--车载传感器之毫米波雷达和超声波雷达
- 【office考试】Office办公软件考试试题题目
- 1-9九个数字组成一个九位数 如果从左边起取出1个数字,需要能被1整除,取出两个数字组成的数能被2整除,取出三个数字组成的数能被3整除,依次类推
- 一个软硬件牛人的学习经历---给同是换行的人以共勉
- 电机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 还在到处寻找Minitab资源?看过来,Minitab使用教程/行业案例/视频教程送你!
- 热烈庆祝华为在9月取得鸿蒙,余承东:明年华为智能手机全面支持鸿蒙系统
- gprs java_WISMO模块GPRS上网设置的过程
- 大话西游手游服务器合服信息查询,大话西游手游合区后能一起玩吗?合区登陆问题详解[图]...