IQueryable & IEnumberable 区别

Namespace And Inheritances Relations

?


1

2

3

4

5

6

7

8

9

Namespace:
System.Collections

    [ComVisibleAttribute(true)]

    [GuidAttribute("496B0ABE-CDEE-11d3-88E8-00902754C43A")]

    public interface IEnumerable

Namespace:
System.Collections.Generic

    public interface IEnumerable
: IEnumerable

Namespace:
System.Linq

    public interface IQueryable
: IEnumerable

    public interface IQueryable
: IEnumerable, IQueryable, IEnumerable

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

static void Main(string[]
args)

        {

            //创建数据库访问网关

            using (SchoolDBEntities
schoolEntities =
new SchoolDBEntities())

            {

                //查询的结果放入IQueryable接口的集合中

                IQueryable<T_Class>
classesIQue = (from c
in schoolEntities.T_Class

                                                   orderby
c.ID

                                                     select
c).Skip<T_Class>(3).Take<T_Class>(3);

                //注意这个AsEnumerable<T_Class>()在分页查询之前,先将其转换成IEnumerable类型

                IEnumerable<T_Class>
classesIEnu = (from c
in schoolEntities.T_Class

                                                    orderby
c.ID  

                                                    select
c).AsEnumerable<T_Class>().Skip<T_Class>(3).Take<T_Class>(3);

                //因为启用了延迟加载机制,所以下面调用一下,才会真正去读取数据库

                int i
= 0;

                foreach (var
c
in classesIQue)

                {

                    i++;

                }

                Console.WriteLine(i);

                foreach (var
c
in classesIEnu)

                {

                    i++;

                }

                Console.WriteLine(i);

            }

            Console.WriteLine("OK");

            Console.ReadKey();

        }

第一种:直接返回 IQueryable类型的查询,如下图所示:

第二种:在用分页查询之前先将其转换成 IEnumerable实际执行的sql如下图所示:

总结

IQueryable接口与IEnumberable接口的区别:  IEnumerable<T> 泛型类在调用自己的SKip 和
Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take
这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤

(转载自:FlyDragon)

时间: 2024-08-25 06:16:21

IQueryable & IEnumberable 区别的相关文章

IQueryable接口与IEnumberable区别

IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令.也是延迟在我要真正显示数据的时候才执行 演示linq to ef中使用IEnumberable与IQueryable的区别,要用到的SQL Server Profiler工具 下面是 IQueryable<T> : var student

IEnumerable和IQueryable的区别以及背后的ExpressionTree表达式树

关于IEnumerable和IQueryable的区别,这事还要从泛型委托Func<T>说起.来看一个简单的泛型委托例子: class Program { static void Main(string[] args) { Func<int, bool> f = i => i > 5; Console.WriteLine(f(3)); Console.WriteLine(f(10)); Console.ReadKey(); } } Func<T>是"

IEnumerable&lt;T&gt;和IQueryable&lt;T&gt;区别

LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryable类,针对继承了IQueryable<T>接口的集合进行扩展.我们会发现接口IQueryable<T>实际也是继承了IEnumerable<T>接口的,既然这样微软为什么要设计出两套扩展方法呢? 从LINQ查询功能上我们知道实际上可以分为三类:LINQ to OBJECT

Entity Framework返回IEnumerable还是IQueryable?

在使用EF的过程中,我们常常使用repository模式,本文就在repository层的返回值是IEnumerable类型还是IQueryable进行探讨. 阅读目录: 一.什么是Repository模式? 二.IEnumerable还是IQueryable的区别 三.实际检验IEnumerable和IQueryable的效率差别 四.总结 一, 什么是Repository模式? Repository是隔离在数据访问层和业务逻辑层之间的.它提供业务逻辑各种对象,使得业务逻辑代码不需要关心数据是

对IEnumerable&lt;T&gt;和IQueryable&lt;T&gt;的一点见解

今天学习了用EF模型做查询,感觉数据库上下文对象的扩展方法很强大,所以研究了一下where的实现原理,其中遇到了一个问题,就是关于IEnumerable和IQueryable的区别,所以查了查资料,这里通俗的和大家说一下 刚开始看到where方法的返回值是一个IQueryable<T>类型,所以我在自己的MyWhere方法的返回值写的也是这个类型,结果报错.然后换成了IEnumerable<T>,解决问题. 总结:首先要说的是IQueryable继承自IEnumerable接口,它

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

今天要写的知识还真心有点绕呢,对于第一节的内容,其实是把原先在内存中的数据源,换成了从数据库中提取出来的数据.从代码的使用方式上是一样的,直接跳过,来看看IEnumerable和IQueryable的区别. 正如Enumerable类型包含着关于IEnumerable<T>的扩展方法来实现LINQ标准查询操作符一样,Queryabl类型包含着关于IQueryable<T>的扩展方法.IEnumerable<T>和IQueryable<T>有两个重要的区别.

MVC学习

MVC 全新的membership框架Asp.net Identity(1)——.Net membership的历史 2014-12-30 08:00 by JustRun, 1532 阅读, 收藏, 编辑 在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改变,都使得验证框架更加的适应变化和可定制.这篇文章是Asp.net Identity系列的开

C#语法之Linq查询基础一

Linq做.Net开发的应该都用过,有些地方很复杂的逻辑用Linq很方便的解决.对于Linq to object.Linq to xml.Linq to sql.Linq to Entity(EF)都可以使用linq查询.不知道大家有没有想过为什么linq对这些都可以使用呢?统一的api适用这么多.其实主要还是IEnummerable<T>和IQueryable<T>两个接口.可能有人会问为什么是两个接口?这两个接口有什么区别或者联系呢?这又要引出来Enummerable.Quer

Entity Framework快速入门--IQueryable与IEnumberable的区别

IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable后,使得IEnumerable不再那么单调,变得更加强大和丰富. 为了区别两个接口,我们通过一个实际的例子来解释一下. 根据上篇随笔的实例,编写如下代码: static void Main( string []