2011-01-31 7 views
18

Usiamo l'opzione di query $ filter system in OData per eseguire i filtri in cui viene inviato il valore del filtro in fase di esecuzione.Opzioni di filtro OData (gestire valori nulli o vuoti)

A titolo di esempio l'URL OData sarebbe come questo:

http://services.odata.org/Northwind/Northwind.svc/Customers $ filter = CustomerID eq @InCustomerID e Country eq @InCountry

dove @InCustomerID & @InCountry sono l'ingresso? valori per il filtro uguale

In fase di esecuzione quando l'utente immette un certo valore per ID cliente (dire 'ABCD') avremmo sostituire il @InCustomerID da 'ABCD'

In fase di esecuzione della query potrebbe essere il seguente:

http://services.odata.org/Northwind/Northwind.svc/Customers $ filter = CustomerID eq 'ABCD' e Country eq 'US'

Nel caso di cui sopra l'utente ha inserito i seguenti valori:? CustomerID => 'ABCD' e Paese => 'US'

La mia domanda riguarda la gestione dei valori nulli nel filtro $ OData. Se l'utente non inserisce alcun valore per CustomerID, allora vogliamo selezionare tutti i clienti da un paese specifico.

In caso sql questo sarebbe qualcosa di simile:

select * from clienti dove ((CustomerID = @InCustomerID) o (@CustomerID è nullo)) e (Country = @Country).

In sostanza come gestire valori nulli o vuoti in modo che il predicato specifico nella condizione logica sia sempre true.

Il filtraggio OData abilita questa opzione?

risposta

22

È possibile confrontare su null utilizzando l'operatore di uguaglianza in questo modo:

$filter=CustomerID eq null 

Nel tuo caso la query degenerare in qualcosa di simile:

$filter=(CustomerID eq null) or (null eq null) 

che dovrebbe funzionare, ma non è molto bello . Hai considerato di rimuovere completamente il predicato in questo caso?

+0

Sono d'accordo non una soluzione pulita. Ma siamo limitati perché il filtro è formato staticamente e durante il runtime potremmo ottenere valori nulli per determinati input di filtro. In uno scenario del genere, non esiste alcuna alternativa facile. Sarebbe difficile rimuovere completamente il predicato poiché ciò implicherebbe parte della quantità di analisi dell'URL e rimozione del predicato nullo – Venki

+1

Il (null eq null) funziona per te? –

Problemi correlati