3
我正在使用新的Web API的項目,我注意到有人從Get方法返回IQueryable <T>。ASP.NET Web API方法返回IQueryable <T>是否有意義?
我的理解是IQueryable對於提高性能(延遲執行)非常有用,但我不認爲HTTP連接另一端的客戶端能夠利用這一點。
我的直覺告訴我,這應該是IEnumberable <T>來代替。我對嗎?
我正在使用新的Web API的項目,我注意到有人從Get方法返回IQueryable <T>。ASP.NET Web API方法返回IQueryable <T>是否有意義?
我的理解是IQueryable對於提高性能(延遲執行)非常有用,但我不認爲HTTP連接另一端的客戶端能夠利用這一點。
我的直覺告訴我,這應該是IEnumberable <T>來代替。我對嗎?
通過在查詢字符串中傳遞一些類似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>
就好了。
我似乎無法在發佈版本的MVC Web API中找到這個'Queryable'屬性;我現在如何實現IQueryable? –
Netricity
2012-09-04 15:12:03
我不得不從NumGet安裝'Microsoft.AspNet.WebApi.OData -Pre'包。 – Netricity 2012-09-04 15:18:56