IQueryable与IQEnumberable的区别
IEnumberable接口:
公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代。也就是说:实现了此接口的object,就可以直接使用froeach遍历此object;
IQueryable接口:
它继承IEnumerable接口,而因为.net版本加Linq和IQueryable后,使得IEnumberable不再那么单调,变得更加强大和丰富。为了区别这两个接口,我们通过一个例子来解释一下。
编写的代码如下:
static void Main(string[] args)
{
//创建数据库访问接口
using (HotalDataBaseEntities hotalEntities = new HotalDataBaseEntities())
{
//查询的结果放入IQueryable接口的集合中
IQueryable<Room> roomIQue = (from c in hotalEntities.Room
orderby c.RoomNum
select c).Skip<Room>().Take<Room>();
//注意在这个AsEnumerable<Room>()在分页查询之前,先将其转换成IEnumerable类型
IEnumerable<Room> roomIEnu = (from c in hotalEntities.Room
orderby c.RoomNum
select c).AsEnumerable<Room>().Skip<Room>().Take<Room>();
//因为启用了延迟加载机制,所惟下面调用一下,才会真正去读取数据库
int i = ;
foreach (var c in roomIQue)
{
i++;
}
Console.WriteLine(i);
foreach (var c in roomIEnu)
{
i++;
}
Console.WriteLine(i);
}
Console.WriteLine("运行完毕");
Console.ReadKey(); }
注意红色代码部分,在用Linq查询实体集合之前我先将其转换成IEnumerable接口类型,看看最终执行sql是怎样的。
第一种:直接返回IQueryable类型的查询,如下图所示:
第二种:在用分页查询之前先将其转换成IEnumerable实际执行的sql如下图所示:

总结:
IQueryable接口与IEnumberable接口的区别:IEnumerable<T>泛型类在调用自己的Skip和Take等扩展方法之前数据就已经加载到本地内存里面,而IQueryable<T>是将Skip,Take这些方表达式翻译成T_sql语句之后再向Sql服务器发送命令,它并不是把所有的数据都加载到内存里来才进行条件过滤。
IQueryable与IQEnumberable的区别的更多相关文章
- C#中IQueryable和IEnumberable的区别
IQueryable和IEnumberable的区别主要在查询方面有区别 IQueryable查询时间是先把skip和Take翻译成sql语句,去数据库执行完成后把数据加载到内存中 IEnumbera ...
- EF入门 IQueryable和IEnumberable的区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...
- Entity Framework中IQueryable, IEnumerable, IList的区别(转载)
原文:http://www.cnblogs.com/hiteddy/archive/2011/10/01/Difference_among_IQueryable_IEnumeralb_IList_in ...
- C#编程之IList<T>、List<T>、ArrayList、IList, ICollection、IEnumerable、IEnumerator、IQueryable 和 IEnumerable的区别
额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别... 在C#中 ...
- Entity Framework中IQueryable, IEnumerable, IList的区别[转]
使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...
- C#中IQueryable和IEnumerable的区别
最近的一个面试中,被问到IQueryable 和 IEnumerable的区别, 我自己看了一些文章,总结如下: 1. 要明白一点,IQueryable接口是继承自IEnumerable的接口的. 2 ...
- Linq之IQueryable接口与IEnumberable区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IEnumerable 包含 ...
- IQueryable与IEnumberable的区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...
- IQueryable接口与IEnumberable区别
IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些 ...
随机推荐
- 关于 pthread_cond_wait 和 pthread_cond_signal , signal 无效的问题
关于一个消费者模式,,,引起的问题.. 我在io线程里不断的把一个函数调用放到队列里 然后ruby线程就不断的从这个队列里取出函数之争并运行. 典型的 消费者模式. 我曾经以为是这样... 这是wor ...
- (大数据工程师学习路径)第二步 Vim编辑器----Vim快速入门
vim模式介绍 以下介绍内容来自维基百科Vim 从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆.几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截 ...
- Class loader:static
package classloader; public class ClassLoaderDisplayDemo { public static void main(String[] args) { ...
- asp.net学习之GridView事件、GridViewRow对象
原文:asp.net学习之GridView事件.GridViewRow对象 1. GridView控件的事件 GridView有很多事件,事件可以定制控件的外观或者行为.事件分为三类 1.1 ...
- php实现和c#一致的DES加密解密
原文:php实现和c#一致的DES加密解密 php实现和c#一致的DES加密解密,可以从网上搜到一大堆,但是测试后发现都没法用.以下正确代码是我经过苦苦才找到的.希望大家在系统整合时能用的上. 注意: ...
- NSString 筛选和最后一个空白、空行,多换行成一个新行
- (NSString *)filterBlankAndBlankLines:(NSString *)str { NSMutableString *Mstr = [NSMutableString st ...
- 转让lua性能executeGlobalFunction
没有其他的,搞搞cocos2dx的lua文字,话lua这件事情在几年前学过一段时间.还曾对自己c++介面,我已经做了一些小东西.只是时间的流逝,模糊记忆. 拿起点功夫和成本.下面是我的一些经验. co ...
- jquery datatables api (转)
学习可参考:http://www.guoxk.com/node/jquery-datatables http://yuemeiqing2008-163-com.iteye.com/blog/20069 ...
- Asp.Net MVC 2.0 Filter基本用法
在这一节里,大家一同学习下mvc 2.0中的filter,简单的说,filter就是标记在action上的一些属性,来实现对action的控制. mvc2.0中主要包括以下filter 1. Auth ...
- linux后台server开发环境的部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))
linux后台server开发环境部署配置 引言 背景 随着互联网业务的不断增多.开发环境变得越来越复杂,为了便于统一server端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3( ...