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的区别的更多相关文章

  1. C#中IQueryable和IEnumberable的区别

    IQueryable和IEnumberable的区别主要在查询方面有区别 IQueryable查询时间是先把skip和Take翻译成sql语句,去数据库执行完成后把数据加载到内存中 IEnumbera ...

  2. EF入门 IQueryable和IEnumberable的区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...

  3. Entity Framework中IQueryable, IEnumerable, IList的区别(转载)

    原文:http://www.cnblogs.com/hiteddy/archive/2011/10/01/Difference_among_IQueryable_IEnumeralb_IList_in ...

  4. C#编程之IList<T>、List<T>、ArrayList、IList, ICollection、IEnumerable、IEnumerator、IQueryable 和 IEnumerable的区别

    额...今天看了半天Ilist<T>和List<T>的区别,然后惊奇的发现使用IList<T>还是List<T>对我的项目来说没有区别...  在C#中 ...

  5. Entity Framework中IQueryable, IEnumerable, IList的区别[转]

    使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的S ...

  6. C#中IQueryable和IEnumerable的区别

    最近的一个面试中,被问到IQueryable 和 IEnumerable的区别, 我自己看了一些文章,总结如下: 1. 要明白一点,IQueryable接口是继承自IEnumerable的接口的. 2 ...

  7. Linq之IQueryable接口与IEnumberable区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IEnumerable 包含 ...

  8. IQueryable与IEnumberable的区别

    IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...

  9. IQueryable接口与IEnumberable区别

    IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些 ...

随机推荐

  1. Codeforces 439C Devu and Partitioning of the Array(模拟)

    题目链接:Codeforces 439C Devu and Partitioning of the Array 题目大意:给出n个数,要分成k份,每份有若干个数,可是仅仅须要关注该份的和为奇数还是偶数 ...

  2. Down to the TLP: How PCI express devices talk (Part II)

    http://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-2 Data Link Layer Packets A ...

  3. 【甘道夫】官方网站MapReduce代码注释具体实例

    引言 1.本文不描写叙述MapReduce入门知识,这类知识网上非常多.请自行查阅 2.本文的实例代码来自官网 http://hadoop.apache.org/docs/current/hadoop ...

  4. [2013山东ACM]省赛 The number of steps (可能DP,数学期望)

    The number of steps nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; ...

  5. oracle 11g 自己主动调整

    --:自己主动调教计划 begin   dbms_workload_repository.create_snapshot(); end; select /*+ result_cache */ coun ...

  6. 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误

    原文:如何解决FormView中实现DropDownList连动选择时出现 "Eval().XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的 ...

  7. 解决:&lt;net.sf.ehcache.util.UpdateChecker&gt; : New update(s) found: 2.6.5

    由于该项目采用ehcache,所以tomcat每次登录你开始打印net.sf.ehcache.util.UpdateChecker doCheck 一旦有没有特别关注.从今天开始 Tomcat 什么时 ...

  8. crawler_httpclient代理访问

    public String getDocumentByProxy(String url) throws ClientProtocolException, IOException { DefaultHt ...

  9. EF4.1: Add/Attach and Entity States(EF中的实体状态转换说明)

    实体的状态,连接以及 SaveChanges 方法 数据库上下文对象维护内存中的对象与数据库中数据行之间的同步.这些信息在调用 SaveChanges方法被调用的时候使用.例如,当使用 Add 方法传 ...

  10. CSharp设计模式读书笔记(8):桥接模式(学习难度:★★★☆☆,使用频率:★★★☆☆)

    桥接模式(Bridge Pattern): 将抽象部分与它的实现部分分离,使它们都可以独立地变化.它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模 ...