ASP.NET Web API方法返回IQueryable <t>?</t>是否有意义

时间:2012-04-09 17:49:30

标签: iqueryable asp.net-web-api deferred-execution

我正在开发一个使用新Web API的项目,我注意到有人正在返回IQueryable&lt; T&gt;来自Get方法。

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

我的直觉告诉我,这应该是IEnumberable&lt; T&gt;而不是。我是对的吗?

1 个答案:

答案 0 :(得分:7)

通过在查询字符串中传递一些类似odata的参数($ top,$ skip,$ filter,$ orderby),可以“查询”对返回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

请注意,在测试版中,任何自动返回IQueryable<T>的操作都会添加此“查询”支持。在最新的位(来自codeplex),您需要手动向操作添加[Queryable]属性以启用此行为。

如果您不想要查询行为,那么是的,返回IEnumerable<T>就好了。