2012-04-09 70 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