Uso delle opzioni di query OData

Completato

OData consente di usare espressioni filtro nell'URI OData per limitare i risultati restituiti, filtrare i risultati in un campo specifico, ordinare i risultati e così via.

È possibile fornire parametri di query specifici all'URI OData. Tutti i parametri di query iniziano con il simbolo del dollaro ($). Per iniziare a specificare i parametri della query, inserire un punto interrogativo (?) e i diversi parametri della query. I parametri della query devono essere separati da una "e" commerciale (&).

Selezione di un sottoinsieme di campi

Se si desidera recuperare i record usando OData, ma si ha bisogno di tutti i campi definiti in un set di record, usare l'espressione filtro $select. $select permette di specificare i campi che si desidera recuperare dal set di record. Prestare attenzione quando si usano i campi in un'espressione filtro perché supportano la distinzione tra maiuscole e minuscole.

Nell'esempio seguente, i campi No, Descrizione e Prezzo unitario sono selezionati dal set di record degli articoli. Il simbolo del dollaro che precede la parola chiave select è importante; senza di esso, il comando non funzionerà.

/Items?$select=No,Description,Unit_Price

Ordinamento del set di risultati

Per ordinare il set di risultati è possibile usare l'espressione filtro $orderby. Le espressioni filtro vengono eseguite tutte a livello di server, il che migliorerà le prestazioni del set di risultati recuperato con una chiamata OData.

La parola chiave orderby permette di specificare il tipo di ordinamento immettendo asc (per crescente, opzione predefinita) o desc (for decrescente).

Nell'esempio seguente, il set di risultati è orderby in base al campo Prezzo unitario. I campi usati nell'espressione filtro orderby non devono necessariamente fare parte dell'espressione filtro select.

/Items?$select=No,Description,Unit_Price&$orderby=Unit_Price desc

Limitazione del set di risultati

Per recuperare un numero specifico di record, usare l'espressione filtro $top. Questa espressione può essere usata assieme all'espressione filtro $skip per ottenere il successivo numero di record.

Nell'esempio che segue, i primi 10 record vengono ignorati e vengono restituiti i cinque record successivi.

/Items?$select=No,Description,Unit_Price&$top=5&$skip=10

Filtraggio del set di risultati

È possibile filtrare il set di risultati per recuperare solo i record in cui uno o più campi soddisfano le condizioni specificate nell'espressione filtro $filter.

Il seguente esempio mostra il recupero di tutti i record in cui Inventario è inferiore a 3.000 e Unità di misura base non è uguale a PCS.

/Items?$filter=Inventory lt 3000 and Base_Unit_of_Measure ne 'PCS'

È possibile specificare più campi usando le parole chiave and e or. Usare le seguenti espressioni per specificare una condizione:

  • lt: minore di

  • gt: maggiore di

  • eq: uguale a

  • ne: diverso da

  • le: minore di o uguale a

  • ge: maggiore di o uguale a

  • in: parte di un set

È possibile usare l'espressione filter nei campi FlowFilter. I FlowField che dipendono dal FlowFilter filtrato verranno ricalcolati.

Nell'esempio che segue, il campo Filtro_ubicazione è un FlowFilter. Questo FlowFilter viene usato nel calcolo del campo Inventario, che è un FlowField.

/Items?$select=No,Inventory$filter=Location_Filter eq 'GREEN'

Filtrare i clienti con i numeri 10000, 20000 o 30000:

$filter=CustomerNo IN ('10000','20000','30000') 

Come recuperare i dettagli delle righe

Per determinati set di record è possibile richiedere dettagli aggiuntivi. Nell'esempio seguente, vengono richiesti tutti i SalesOrder. Tuttavia, in questo esempio, si desidera recuperare le SalesLines corrispondenti con la stessa richiesta. Per completare questa attività, usare l'espressione filtro $expand. Se nel documento EDM è visualizzata una NavigationProperty per l'entità, è possibile usare il filtro $expand.

L'esempio seguente mostra tutte le SalesLines corrispondenti richieste.

/SalesOrders?$expand=SalesOrderSalesLines

È anche possibile filtrare le SalesLines usando l'espressione filtro $filter.

/SalesOrders?$expand=SalesOrderSalesLines($filter=No eq '1920-S')