简单解释一下:从网上看到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接口的区别相关推荐

  1. 抽象类(abstract class)和接口(Interface)的区别

    抽象类(abstract class)和接口(Interface)的区别 前言 抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予 ...

  2. Android --- Serializable 接口与 Parcelable 接口的使用方法和区别,怎么选择?

    文章目录 一.前言: 二.Serializable 接口 三.Parcelable 接口 四.两种接口怎么选择 一.前言: 本节主要讲解 IPC 中的基本概念,Serializable 接口与 Par ...

  3. Android中的Parcelable接口和Serializable用法和区别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

  4. axios请求接口http_使用axios请求接口,几种content-type的区别详解

    axios的使用 安装(一般使用框架的话, 脚手架都集成了) $ npm install axios 请求示例 // POST axios.post('/user', { firstName: 'Fr ...

  5. USB-A接口和USB-B接口有什么区别?

    参考文章:USB A接口和B接口具体有什么区别

  6. java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  7. (读书随笔)接口和抽象类的一些区别总结

    自己写的笔记 最近看"图灵"出版的一本<Java设计模式>的书,小感慨了一下,还是外国人写的好,对接口和抽象类进行一些总结 1.一个类可以实现多个接口,但是只能扩展一个 ...

  8. 配置静态路由下一跳为本地出战接口和IP地址的区别

    配置静态路由下一跳为本地出战接口和IP地址的区别 在配置静态路由时,下一跳可以使用下一路由器的IP地址,也可以使用本路由器的出站接口.在点对点的网络中,两者可能没有什么差别,但在以太网中或者NBMA网 ...

  9. Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)

    前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...

最新文章

  1. 卧槽!Python学习神器!!!
  2. 负数对2取余_不同语言的负数取余问题
  3. 列出所有K个元素的子集-----2013年1月26日
  4. 《Python学习之路 -- 字符串的方法》
  5. Android 系统(197)---USB VID
  6. WorldFirstClassOnline
  7. jQuery实时校验输入框:整数、浮点数
  8. 【飞行器】基于matlab GUI四旋翼飞行器PID控制仿真【含Matlab源码 1279期】
  9. 麒麟V10系统密码策略修改
  10. okhttp实现连接池原理
  11. 隐形缝针法_裤腰大了怎么改小的隐形针法
  12. 学习笔记3--车载传感器之毫米波雷达和超声波雷达
  13. 【office考试】Office办公软件考试试题题目
  14. 1-9九个数字组成一个九位数 如果从左边起取出1个数字,需要能被1整除,取出两个数字组成的数能被2整除,取出三个数字组成的数能被3整除,依次类推
  15. 一个软硬件牛人的学习经历---给同是换行的人以共勉
  16. 电机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. 还在到处寻找Minitab资源?看过来,Minitab使用教程/行业案例/视频教程送你!
  18. 热烈庆祝华为在9月取得鸿蒙,余承东:明年华为智能手机全面支持鸿蒙系统
  19. gprs java_WISMO模块GPRS上网设置的过程
  20. 大话西游手游服务器合服信息查询,大话西游手游合区后能一起玩吗?合区登陆问题详解[图]...

热门文章

  1. VS2010与Windows7共舞:对库进行编程
  2. cojs EX_香蕉 题解报告
  3. C++之C/C++内存对齐
  4. 操作数组的常用方式二-----排序、查找
  5. git 上传修改文件
  6. PCA与图像压缩与去噪
  7. OpenCV3学习(10.2)codebook码书法实现背景剔除
  8. JS Statements var / let / const
  9. 7-200 天梯赛的善良 (20 分)
  10. 附带备忘录的斐波那契(C++)