【发布时间】:2012-04-22 01:42:44
【问题描述】:
我正在开发一个使用新 Web API 的项目,我注意到有人从 Get 方法返回一个 IQueryable
我的理解是 IQueryable 对于提高性能(延迟执行)很有用,但我认为 HTTP 连接另一端的客户端无法利用这一点。
我的直觉告诉我,这应该是 IEnumberable
【问题讨论】:
标签: iqueryable asp.net-web-api deferred-execution
我正在开发一个使用新 Web API 的项目,我注意到有人从 Get 方法返回一个 IQueryable
我的理解是 IQueryable 对于提高性能(延迟执行)很有用,但我认为 HTTP 连接另一端的客户端无法利用这一点。
我的直觉告诉我,这应该是 IEnumberable
【问题讨论】:
标签: iqueryable asp.net-web-api deferred-execution
可以通过在查询字符串($top、$skip、$filter、$orderby)中传递一些类似 odata 的参数来“查询”对返回 IQueryable<T> 的方法的响应。例如,如果您的资源可以在 .../api/People 中找到,您可以发送这些请求,这将导致服务器返回不同的数据:
.../api/People?$top=10 ==> return only the first 10 elements
.../api/People?$skip=10&$top=5 ==> return the 11th to 15th elements
.../api/People?$filter=Name%20eq%20'John' ==> Only return people named "John"
.../api/People?$orderby=Name&$top=10 ==> return the first 10 elements, ordered by name
请注意,在 beta 版本中,任何返回 IQueryable<T> 的操作都会自动添加此“查询”支持。在最新的位(来自 codeplex)上,您需要手动将 [Queryable] 属性添加到操作以启用此行为。
如果您不希望这种查询行为,那么可以,返回 IEnumerable<T> 就可以了。
【讨论】: