首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IEnumerable和IQueryable区分

LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable接口集合进行扩展;Queryable类,针对继承了...我们会发现接口IQueryable实际也是继承了IEnumerable接口,既然这样微软为什么要设计出两套扩展方法呢?...针对LINQ to SQL时,则使用Queryable中扩展方法,它接受是Expression。 那么,到底什么时候使用IQueryable,什么时候使用IEnumerable?...LINQ查询返回IEnumerable类型,我们看一下vsIntellisense效果: ?...由于我们在LINQ查询时候加上了AsEnumerable(),因此我们在第二条语句能看到返回类型已经变为IEnumerable,参数也变成了Func类型。

89620

C#内建接口:IEnumerable

这节讲一下接口IEnumerable。 01 什么是Enumerable 在一些返回集合数据接口中,我们经常能看到IEnumerable接口身影。那什么是Enumerable呢?...02 接口成员及使用示例 我们先来看接口中有什么,因为IEnumerable接口一般都是用其泛型版,我们直接看这种: 接口内容很简单,但是其中又出现了一个名为IEnumerator接口...NET 拾遗补漏] 理解 yield 关键字),这个方法最终运行效果就是一秒钟返回一个当前时间构成一个IEnumerable集合。...foreach就是为遍历IEnumerable数据打造,它里边为我们封装了访问枚举器操作,所以我们用它来遍历数据非常方便,下面来看一下运行效果: 当然,我们也想知道不用foreach应该怎么遍历...IEnumerable数据,所以请看如下代码: 拿到枚举器,我们就可以调用MoveNext找数据(为什么要先调用MoveNext,而不是先取值,再调用MoveNext寻找下一个数据,大家可以再次联想一下打疫苗情景

81420
您找到你想要的搜索结果了吗?
是的
没有找到

(转载)IQueryable和IEnumerable

下面内容摘自上面第4篇博客,非本人原创: 那么什么时候用IQueryable,什么时候用IEnumerable?...(每次在执行where查询操作符时候IQueryProvider会为我们创建一个新IQueryable,调用AsEnumerable()方法时候并不会去实际取值,只是 得到了一个IEnumerable...,所以EF在查询数据时候不要先取IEnumerable再去筛选数据。...(解析表达式,然后执行取得结果)) 这就是IQueryable延迟加载把. .知识点总结   (1) 解决查询多次问题,因IQueryable延迟加载,当用到集合时候,provider会解析表达式...(4) IEnumerable接口是一个公开枚举器,该枚举器支持在指定集合上进行简单迭代,也就是次接口可以直接使用foreach遍历次Object。 ?

51530

总结一下 IEnumerable 例子

本篇将围绕 《试试IEnumerable10个小例子》和《试试IEnumerable另外6个小例子》给出例子,总结一下对于IEnumerable接口一些使用方法,希望读者能够从中获得一些启发。...框架类型迭代 对于一个实现了IEnumerable接口类型来说,开发中最常用,就是把这个类型对象放入到foreach等循环关键词中进行迭代,遍历其中元素进行处理。...IEnumerable及其泛型版本IEnumerable定义了一个类型“可迭代性”。这点很容易理解,系统中很多集合类型都实现了该接口。 因此这些集合类型均可以采用foreach进行迭代遍历。...建议读者在使用框架中实现了IEnumerable类型时,一定要注意迭代细节,可以通过MSDN上文档了解其特殊性。...这些数据结构迭代通常需要特定算法支持。 在《试试IEnumerable另外6个小例子》中关于树几个例子便数据此类中。

94200

试试IEnumerable另外6个小例子

IEnumerable 接口是 C# 开发过程中非常重要接口,对于其特性和用法了解是十分必要。本文将通过6个小例子,来熟悉一下其简单用法。...阅读建议 在阅读本篇时,建议先阅读前篇《试试IEnumerable10个小例子》,更加助于读者理解。 阅读并理解本篇需要花费5-10分钟左右时间,而且其中包含一些实践建议。...全是源码 以下便是这6个小例子,相应说明均标记在注释中。...T14搜索树 若以下代码无法正常展示,也可以点击此处查看 T15分页 若以下代码无法正常展示,也可以点击此处查看 T16分页与多级缓存 若以下代码无法正常展示,也可以点击此处查看 源码说明 以上示例源代码放置于博客示例代码库中

35200

.NET面试题系列 - IEnumerable派生类

IEnumerable分为两个版本:泛型和非泛型IEnumerable只有一个方法GetEnumerator。...如果你只需要数据而不打算修改它,不打算为集合插入或删除任何成员(例如从远端拿回数据显示),则你不需要任何比IEnumerable更复杂接口。 ICollection继承IEnumerable。...由于实现方式特殊性,每个哈希表上元素仅有一个可能出现位置,就是其哈希函数值加上冲突之后调整偏移量,无法移动哈希表上元素。 哈希表是一种键值对类型数据结构。...IEnumerable派生类:小结 访问特定位置成员方式 继承自 特点 IEnumerable 通过ElementAt 无 有泛型版本 提供遍历(通过GetEnumerator) 不能实例化(...所有接口都是如此) ICollection 通过ElementAt IEnumerable 有泛型版本 提供Count方法 提供转换为IQueryable方法 ArrayList 索引器 IList

81320

从yield关键字看IEnumerable和Collection区别

后记 一、一个很简单例子 下面是一个很简单例子:Vector为自定义表示二维向量类型,Program静态方法GetVetors方法获取以类型为IEnumerable...,实现接口包括:IEnumerable, IEnumerable, IEnumerator, IEnumerator, IDisposable。...但是有的情况下,我们需要调用别人提供API来获取IEnumerable对象,我们不清楚对方有没有使用yield关键字。...yield这个关键字如何如何,因为不止是yield,我们一般LINQ查询也会导致这个问题,而是借此说明IEnumerable对象和Array、List这样集合类型区别。...IEnumerable这个接口和集合没有本质联系,只是提供“枚举”功能。甚至说,我们应该将IEnumerable对象当成“只读”,如果我们需要“可写”功能,你应该使用数组或者集合类型。

76680

【5min+】你怎么穿着品如衣服?IEnumerable AND IEnumerator

正文 IEnumerable和IEnumerator,如果不仔细看,是不是都以为它们是同样一个单词。特别是我们习惯了每天看大量中文,这种只是很小区别的单词更是容易犯错。...好,回到今天主题:IEnumerable和IEnumerator。目前我们知道它俩是不一样东西了,至少从单词层面(ง •_•)ง。那么在 DotNET 中,它们扮演着怎么样角色呢?...先来看看它们样子: ? ? IEnumerable说:我提供了公开枚举器,并且该枚举器支持在非泛型集合上进行简单迭代功能。 IEnumerator说:我提供了支持对非泛型集合进行简单迭代功能。...其实看接口样貌我们就大概能够理解其中奥秘了,IEnumerable 提供了可以迭代能力,而这种能力是通过内部可迭代对象来实现了,这个对象就是IEnumerator。...那我们就来查看IList接口继承关系: public interface IList : ICollection, IEnumerable 果不其然,它继承了IEnumerable接口。

36730

2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?

IEnumerator IEnumerator、IEnumerable接口有相似的名称,这两个接口通常也在一起使用,它们有不同用途。...Current方法: 返回position位置的当前对象 IEnumerable IEnumerable接口为foreach迭代提供了支持,IEnumerable要求你实现GetEnumerator方法...仅凭以上辞藻,很难区分两个接口使用场景。 IEnumerator接口定义对类中集合类型对象迭代方式, IEnumerable接口允许使用foreach循环进行枚举。...因此IEnumerable接口GetEnumerator方法会返回一个IEnumerator接口。要实现IEnumerable,你还必须实现IEnumerator。...IEnumerable接口代表该对象具备了可被枚举性质,是形容词。 总之,如果您想提供对foreach支持,那么就先让对象可枚举,再谈论枚举方式,也就是说实现这两个接口。

2.6K20
领券