对IEnumerable<T>和IQueryable<T>的一点见解

  今天学习了用EF模型做查询,感觉数据库上下文对象的扩展方法很强大,所以研究了一下where的实现原理,其中遇到了一个问题,就是关于IEnumerable和IQueryable的区别,所以查了查资料,这里通俗的和大家说一下

  刚开始看到where方法的返回值是一个IQueryable<T>类型,所以我在自己的MyWhere方法的返回值写的也是这个类型,结果报错。然后换成了IEnumerable<T>,解决问题。

  

总结:首先要说的是IQueryable继承自IEnumerable接口,它是的IEnumerable更强大。IEnumerable接口是在调用自己的扩展方法之前,就已经将数据加载保存到了本地内存里,然后根据条件,从内存中筛选数据返回。IQueryable接口是将方法翻译成T-SQL语句,然后再向数据库服务器中发出命令,筛选满足条件的数据,返回给我们。

  本人不才,如果有理解偏差的地方,还请各位大牛不吝赐教。

  

时间: 2024-10-11 07:49:12

对IEnumerable<T>和IQueryable<T>的一点见解的相关文章

编写高质量代码改善C#程序的157个建议——建议29:区别LINQ查询中的IEnumerable&lt;T&gt;和IQueryable&lt;T&gt;

建议29:区别LINQ查询中的IEnumerable<T>和IQueryable<T> LINQ查询一共提供了两类扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryable类,它针对继承了IQueryable<T>接口的集合类进行扩扎.接口IQueryable<T>也是继承了IEnumerable<T>接口的,所以,致使两个接口的方

关于如何做自动化测试和何时做自动化测试的一点见解和疑问

中华传统文化源于<易>,成于孝,孝为德之本.孝顺:孝则顺,不孝则不顺. 不久前,参加Thoughtworks组织的一场自动化测试的分享,同事由于出差国外不能参加,特意嘱托我提问两个问题: 在互联网这个将"敏捷"与"持续集成"进行积极实践的环境里,"敏捷测试"与"自动化测试"成了一个大家经常探讨的话题, 那么自动化测试最佳的实行时间是在什么时候?如何推行最有效的自动化测试? 以下谨代表个人观点: 个人整理了一些测试最

Entity Framework中使用IEnumerable&lt;T&gt;、IQueryable&lt;T&gt;及IList&lt;T&gt;的区别

1. IEnumerable<T> IEnumerable<T> :对于在内存中集合上运行的方法,返回的可枚举对象将捕获传递到方法的参数.在枚举该对象时,将使用查询运算符的逻辑,并返回查询结果. IEnumerable<T>在.Net2.0引入. IEnumberable使用的是LINQ to Object方式,将AsEnumerable()时对应的所有记录先加载到内存,再在此基础上再执行后面的Query. 本地数据源用IEnumerable<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

LINQ查询中的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

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

关于STM32系统构架的一点见解

初学32,留下一点自己学习的记录,以便今后参考,大神指明错误不胜感激 一.首先说说STM32F10x芯片由丝印所体现出的共同点和区别. 先简单说说命名规则: 101基本型,102USB基本型,103增强型,105或107互联型. T:36脚,C:48脚,R:64脚,V:100脚,Z:144脚. C:256K SRAM, D:384K SRAM, E:512K SRAM. 我们正对芯片的丝印,会看到芯片左下角会有一个小圆点(正方向),有的在右上角会有一个稍大点的圆圈标记,靠近左下角小圆点的管脚号为

有关管理客户需求的一点见解

软件开发难,恐怕大家都觉得最难的是搞清楚需求:但是其实更难的是管理需求.今天在北京.NET俱乐部上又有人提出了这样的问题,主要的难点是他的开发团队是为了自己的领导们服务的,几个领导都有自己的想法,而且不停的在开发过程中提各种个样的问题:开发进度无法保证,开发的结果总是满足不了要求…… 其实这样的问题大家都遇到过,而对于普通的开发人员来说我们往往不去关心,认为这是项目经理的事情,但是其实不然,这样的问题涉及软件开发的各个环节,就算你是出于最底层的开发人员,一样需要控制项目经理交给你的任务.其实这里

关于新学期Python的一点见解

首先很高兴选到了Python,之前学习过c语言,不过学的不大好. 我希望此次课程能够教会我们如何运用Python解决生活中的一些小问题,或者可以解决其他学科上的一些问题,当然有关人工智能方面的最好. 我觉得理论课应该更联系生活实际,这样比较容易引起我们的兴趣.实验课应该给一些提示,然后让我们自主完成所留的作业. 这是我的一点小意见. 原文地址:https://www.cnblogs.com/langfang/p/9690400.html