第一篇:https://www.cnblogs.com/zgqys1980/p/4047315.html

第二篇:https://www.cnblogs.com/shenbing/p/5394228.html

第三篇:https://blog.csdn.net/ydm19891101/article/details/50969323

第四篇:http://www.igiven.com/?p=2804  (这篇最好,阐释最详尽,最透彻)

下面内容摘自上面第4篇博客,非本人原创:

那么什么时候用IQueryable,什么时候用IEnumerable?

1.Func<>谓词表达式,就是一个委托,委托一旦调用,就立即执行了,将执行结果保存在内存中。

2.Expression是一个表达式,会存储拼接表达式树,直到在运行期最终执行。

那么在EF中我们根据条件查询数据时,不应该把数据一次性加载到本地内存中,然后再本地内存中进行筛选,如果数据量大了,就崩溃了。

我们需要将表达式组合好,然后再一起提交到数据库执行,返回查询结果。

(每次在执行where查询操作符的时候IQueryProvider会为我们创建一个新的IQueryable,调用AsEnumerable()方法的时候并不会去实际取值,只是

得到了一个IEnumerable,所以EF在查询数据时候不要先取IEnumerable再去筛选数据。执行ToList方法时才会去真正调用迭代器GetEnumerator()
取值。真正取值时候,会去执行IQueryProvider中的Excute方法.(解析表达式,然后执行取得结果))

这就是IQueryable的延迟加载把.

.知识点总结

  (1) 解决查询多次的问题,因IQueryable延迟加载,当用到集合的时候,provider会解析表达式,然后生成查询,所以会走一个复杂的过程。

  (2) 本地集合:List,Array,IEnumable都是本地集合,都是缓存在里面的

  (3) 使用EF管理上下文实例的最佳选择是线程的唯一。

  (4) IEnumerable接口是一个公开枚举器,该枚举器支持在指定的集合上进行简单迭代,也就是次接口可以直接使用foreach遍历次Object。

(转载)IQueryable和IEnumerable的更多相关文章

  1. IQueryable 和 IEnumerable

    IQueryable 和 IEnumerable 其实,对于上面的即有过虑又有排序的条件查询Linq语句,EF是读取数据库中整个Books表中的数据到内存,还是根据Linq查询语句智能的生成SQL再执 ...

  2. IQueryable和IEnumerable,IList的区别

    IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution) IQueryable和IEnumerabl ...

  3. C# IQueryable和IEnumerable的区别

    在使用EF查询数据的时候,我们常用的查询数据方式有linq to sql,linq to object, 查询返回的结果有两种类型:IQueryable.IEnumerable,两者内部的处理机制是完 ...

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

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

  5. IQueryable和IEnumerable

    使用EF你必须知道这两个的区别,可以帮助我们的提升性能. 表达树:Linq 表达 ①IQueryable和IEnumerable IQueryable 延时执行:扩展方法接受的是Expression( ...

  6. IQueryable和IEnumerable以及AsEnumerable()和ToList()的区别

    注意:本文背景为 Linq to sql .文中ie指代IEnumerable,iq指代IQueryable. IQueryable 和 IEnumerable 的区别 IQueryable 延时执行 ...

  7. C#中IQueryable和IEnumerable的区别

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

  8. C# IEnumerable与IQueryable ,IEnumerable与IList ,LINQ理解Var和IEnumerable

    原文:https://www.cnblogs.com/WinHEC/articles/understanding-var-and-ienumerable-with-linq.html 使用LINQ从数 ...

  9. IQueryable 和 IEnumerable(二)

    IQueryable 和 IEnumerable的扩展方法 一  我们从ef的DbSet<T>看起来,我们看到他继承了IQueryable<T> 和 IEnumerable&l ...

随机推荐

  1. JavaSE-管道流

    1,)创建管道输出流PipedOutputStream pos和管道输入流PipedInputStream pis 2,)将pos和pis匹配,pos.connect(pis); 3,)将pos赋给信 ...

  2. 谈谈网络分层和IP

    概述 在计算机网络这门课中,往往是将各层协议拆开一章一章的讲,每层协议是干嘛的,都各种怎么工作的.但如果有人问,这些协议之间怎么协调工作,有什么关系,往往处于懵逼状态. 网络分层 网络为什么分层,其实 ...

  3. 使用CompletableFuture实现异步编程

    在开发中会碰到一种场景,如下 Object result1 = service1.func1();//执行80ms Object result2 =service2.func2();//执行50ms ...

  4. python接口自动化(二十三)--unittest断言——上(详解)

    简介 在测试用例中,执行完测试用例后,最后一步是判断测试结果是 pass 还是 fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert).用 unittest 组件测试用例的时 ...

  5. 死磕 java集合之ArrayBlockingQueue源码分析

    问题 (1)ArrayBlockingQueue的实现方式? (2)ArrayBlockingQueue是否需要扩容? (3)ArrayBlockingQueue有什么缺点? 简介 ArrayBloc ...

  6. 死磕 java集合之PriorityQueue源码分析

    问题 (1)什么是优先级队列? (2)怎么实现一个优先级队列? (3)PriorityQueue是线程安全的吗? (4)PriorityQueue就有序的吗? 简介 优先级队列,是0个或多个元素的集合 ...

  7. 『简单dp测试题解』

    这一次组织了一场\(dp\)的专项考试,出了好几道经典的简单\(dp\)套路题,特开一篇博客写一下题解. Tower(双向dp) Description 信大家都写过数字三角形问题,题目很简单求最大化 ...

  8. Docker安装+HelloWorld+运行Tomcat

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 上一篇已经讲解了为什么需要Docker?,相信大家已 ...

  9. sympy科学计算器

    SymPy库常用函数 简介 本文抄于https://www.cnblogs.com/baby123/p/6296629.html SymPy是一个符号计算的Python库.它的目标是成为一个全功能的计 ...

  10. 《k8s-1.13版本源码分析》-调度预选

    本文大纲 预选流程 predicate的并发 一个node的predicate predicates的顺序 单个predicate执行过程 具体的predicate函数 本系列文章已经开源到githu ...