5

我正在开发一个使用新 Web API 的项目,我注意到有人正在从 Get 方法返回一个 IQueryable<T>。

我的理解是 IQueryable 对于提高性能(延迟执行)很有用,但我认为 HTTP 连接另一端的客户端无法利用这一点。

我的直觉告诉我这应该是 IEnumberable<T> 而不是。我是对的吗?

4

1 回答 1

8

IQueryable<T>可以通过在查询字符串($top、$skip、$filter、$orderby)中传递一些类似 odata 的参数来“查询”对返回方法的响应。例如,如果您的资源可以在 .../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>就可以了。

于 2012-04-09T19:56:35.987 回答