2012-04-09 73 views
3

我正在使用新的Web API的项目,我注意到有人从Get方法返回IQueryable <T>。ASP.NET Web API方法返回IQueryable <T>是否有意义?

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

我的直觉告诉我,这应该是IEnumberable <T>来代替。我对吗?

回答

7

通过在查询字符串中传递一些类似odata的参数($ top,$ skip,$ filter,$ orderby)可以“返回返回方法IQueryable<T>的响应”。例如,如果你的资源可以在.../API /人找到,您可以发送这些请求,这将导致服务器返回不同的数据:

.../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>就好了。

+0

我似乎无法在发布版本的MVC Web API中找到这个'Queryable'属性;我现在如何实现IQueryable ? – Netricity 2012-09-04 15:12:03

+0

我不得不从NumGet安装'Microsoft.AspNet.WebApi.OData -Pre'包。 – Netricity 2012-09-04 15:18:56