我正在开发一个使用新Web API的项目,我注意到有人正在返回IQueryable< T>来自Get方法。
我的理解是IQueryable对提高性能(延迟执行)很有用,但我不认为HTTP连接另一端的客户端能够利用它。
我的直觉告诉我,这应该是IEnumberable< T>而不是。我是对的吗?
答案 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>
就好了。