2012-04-09 9 views
3

Ich arbeite an einem Projekt, das die neue Web-API verwendet, und ich bemerkte, dass jemand eine IQueryable <T> von einer Get-Methode zurückgibt.Ist es für eine ASP.NET-Web-API-Methode sinnvoll, IQueryable <T> zurückzugeben?

Mein Verständnis ist, dass IQueryable ist nützlich für die Verbesserung der Leistung (verzögerte Ausführung), aber ich glaube nicht, dass ein Client am anderen Ende einer HTTP-Verbindung in der Lage sein wird, davon zu profitieren.

Mein Darm sagt mir, dass dies IEnumberable <T> stattdessen sein sollte. Habe ich Recht damit?

Antwort

7

Antworten auf Methoden, die IQueryable<T> zurückgeben, können "abgefragt" werden, indem einige odata-ähnliche Parameter in der Abfragezeichenfolge ($ top, $ skip, $ filter, $ orderby) übergeben werden. Zum Beispiel kann, wenn Ihre Ressource .../api/Leute gefunden werden, können Sie diese Anfragen senden, die den Server dazu bringen, werden verschiedene Daten zurück:

.../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 

Beachten Sie, dass auf der Beta-Version jeder Operation, die returns IQueryable<T> hat automatisch diese "Abfrage" Unterstützung hinzugefügt. Auf den neuesten Bits (aus Codeplex) müssen Sie dem Vorgang manuell ein [Queryable]-Attribut hinzufügen, um dieses Verhalten zu aktivieren.

Wenn Sie dieses Abfrageverhalten nicht möchten, dann ist Ja, IEnumerable<T> ist in Ordnung.

+0

Ich kann nicht scheinen, dieses 'Queryable' Attribut in der Release-Version von MVC Web API zu finden; Wie implementiere ich IQueryable jetzt? – Netricity

+0

Ich musste das Paket "Microsoft.AspNet.WebApi.OData -Pre" von NumGet installieren. – Netricity