2013-03-01 13 views

risposta

9

Sto usando Microsoft WebAPI con i seguenti pacchetti installati Nuget:

http://nuget.org/packages/Microsoft.Data.OData/

http://nuget.org/packages/microsoft.aspnet.webapi.odata

che mi permette di scrivere cose come:

using System.Web.Http; 
using System.Web.Http.OData.Query; 

// Some stuff left out 

[Queryable] 
public IQueryable<Item> Get(ODataQueryOptions<Item> query) 
{   
    var items = query.ApplyTo(from item in context.Items select item); 
    return (IQueryable<Item>) items; 
} 

Allora posso chiamarlo usando jQuery Ajax (per l'esempio, preferisco usare BackboneJS) in questo modo:

$.ajax({ url: '/api/items', data: $.param({ '$filter': 'ID eq 1' }) }); 

Quale restituirà quindi solo gli articoli con un ID uguale a 1, che penso sia quello che si sta cercando?

Se itemID è l'ID principale dell'oggetto si stanno recuperando, probabilmente seguire i principi REST e creare e API in cui l'URL per recuperare un elemento con l'ID 1 sarebbe:

/api/items/1 

E utilizzare solo query oData sulla raccolta di elementi se si eseguono query in base ad altre proprietà degli elementi nella raccolta o se si esegue qualcosa di simile di seguito per esempio quando si recuperano i primi 10 record.

$.ajax({ url: '/api/items', data: $.param({ '$top': 10 }) }); 
+0

query.ApplyTo sembra quello che sto cercando. Ne ho bisogno su mono. Grazie. –

1

È possibile utilizzare seguente pacchetto NuGet per applicare il filtro: https://www.nuget.org/packages/Community.OData.Linq

Esempio di codice sarebbe:

using System.Linq; 
using Community.OData.Linq; 

// dataSet in this example - any IQuerable<T> 
Sample[] filterResult = dataSet.OData().Filter("Id eq 2 or Name eq 'name3'").ToArray(); 

Attualmente supportato: filtro e orderby in formato v4