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 = (from s in stuEntities.Student
          orderby s.StudentID
              select s).Skip(3).Take(3);

生成的SQL:

SELECT * FROM (
select ROW_NUMBER() over(order by id)as row,* from [T_Scripts]
)as t1 where t1.row > 3 and t1.row <= 6

下面是 IEnumerable<T>:

var student = (from s in stuEntities.Student
          orderby s.StudentID
              select s).AsEnumerable().Skip(3).Take(3);

生成的SQL:

SELECT * FROM [T_Scripts]

从上面的执行结果可以看出来, IQueryable 是先将所有LINQ语句转换成命令树,然后通过SQL执行
而IEnumerable就是在 AsEnumerable 之前就立刻生成了SQL语句,后面再由程序Skip,Take

时间: 2024-10-10 11:54:37

IQueryable接口与IEnumberable区别的相关文章

IQueryable &amp; 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.Gen

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

使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Toplink的朋友知道很只要设置日志打印级别=FINE就可以配置使之生成的SQL在服务器中打印出来,Entiry Framework没有那么幸运,在以前要检测生成SQL的唯一方法是SQL Server Profiler,但使用起来并不方便,结果也不能自动保存到文件中.

Entity Framework中IQueryable, IEnumerable, IList的区别

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Toplink的

C#.NET里面抽象类和接口有什么区别

1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分.或者说,它是面向对象编程体系中的思想精髓之一. 2.接口的本质 接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承).它在形式上可能是如下的样子: interface InterfaceName {     void Method1();     void

IQueryable接口与IEnumerable接口比较

今天写代码的时候调到IQueryable里面看它的方法,发现它是实现IEnumerable接口的,then i'm confused! 要区分他俩还是先写段代码来看看吧~ 我们拿出以前那个练习EF增删改查的代码改一改: #region 查询单个实体 using (var dbContext = new SecondChargeEntities())//先创建访问数据库的入口 { //var mystudent = dbContext.T_StuInfo.Find("01");//使用主

Java 抽象类和接口有什么区别

抽象类和接口有什么区别? 1. 抽象类在java语言中所表示的是一种继承关系,一个子类只能继承一个父类,但是可以实现多个接口. 2. 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的(public static final)成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的. 3.抽象类的子类可以部分实现父类中的抽象方法,但是它们本身也是抽象类; 而当类实现特殊接口时,它定义所有这种接口的方法. 4.抽象类和接口所反映的设计理念是不同的,抽象

抽象类和接口有什么区别

含有abstract 修饰符的class 即为抽象类,abstract 类不能创建的实例对象.含有abstract 方法的类必须定义为abstract class,abstract class 类中的方法不必是抽象的.abstract class 类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法.如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract 类型.接口(interface)可以说成是抽象类的一种特例,接口中的所有

C# IQueryable和IEnumerable的区别

原文地址:http://blog.csdn.net/q646926099/article/details/52297897 在使用EF查询数据的时候,我们常用的查询数据方式有linq to sql,linq to object, 查询返回的结果有两种类型:IQueryable.IEnumerable,两者内部的处理机制是完全不同的. 清楚认识,这里也是一个数据查询的优化点. 在System.linq命名空间,有两个静态类:Queryable和Enumerable. 在System.linq.Qu

Java 接口和抽象类区别

1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了.当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 .面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用. 说到了抽象,我就不能不提到曾让我头痛的Java接口和Java抽象类了,这也是本文我想说的重点. 既然面向对象设计的重点在于