为了账号安全,请及时绑定邮箱和手机立即绑定

IQueryable<T>和IEnenable<T>之间有什么区别?

IQueryable<T>和IEnenable<T>之间有什么区别?

慕婉清6462132 2019-07-01 14:51:37
IQueryable<T>和IEnenable<T>之间有什么区别?.之间的区别是什么?IQueryable<T>和IEnumerable<T>?另见IQueryable和IEnement的区别是什么?与这个问题重叠。
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

首先,IQueryable<T> 延展这个IEnumerable<T>接口,所以您可以使用“普通”进行任何操作。IEnumerable<T>,您也可以使用IQueryable<T>.

IEnumerable<T>只是有一个GetEnumerator()方法返回Enumerator<T>你可以称之为MoveNext()方法来迭代T.

什么IQueryable<T>有那个吗?IEnumerable<T> 是两个特别的属性-一个指向查询提供程序(例如,LINQtoSQL提供程序)和另一个指向查询表达式表示IQueryable<T>对象作为一个运行时可遍历的抽象语法树,该抽象语法树可由给定的查询提供程序理解(在大多数情况下,您无法将LINQtoSQL表达式赋予LINQtoEntiesProvider,而不会引发异常)。

表达式可以是对象本身的常量表达式,也可以是一组由查询运算符和操作数组成的复杂树。查询提供程序的IQueryProvider.Execute()IQueryProvider.CreateQuery()方法调用表达传递给它,然后查询结果或另一个查询结果。IQueryable分别返回。


查看完整回答
反对 回复 2019-07-01
?
FFIVE

TA贡献1797条经验 获得超6个赞

主要区别在于LINQ运算符用于IQueryable<T>拿走,带走Expression对象而不是委托,这意味着它接收到的自定义查询逻辑(例如谓词或值选择器)是以表达式树的形式出现的,而不是委托给方法的。

  • IEnumerable<T>

    对于处理内存中迭代的序列是很好的,但是
  • IQueryable<T>

    允许内存不足,例如远程数据源,例如数据库或Web服务。

查询执行:

  • 执行查询的位置。“正在进行中”,通常所需的是执行查询的每个部分所需的代码(作为代码)。

  • 执行的位置程序外,查询的逻辑必须用数据表示,以便LINQ提供程序可以将其转换为内存不足执行的适当形式-无论是LDAP查询、SQL还是其他什么。

详见:


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 404 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信