2011-01-31 66 views
18

Estamos utilizando la opción de consulta del sistema $ filter en OData para ejecutar filtros donde el valor del filtro se envía en tiempo de ejecución.Opciones de filtro OData (manejar valores nulos o vacíos)

A modo de ejemplo, la URL de OData sería así:

http://services.odata.org/Northwind/Northwind.svc/Customers $ filter = CustomerID eq eq @InCustomerID y País @InCountry

donde @InCustomerID & @InCountry son la entrada? valores para el filtro igual.

En tiempo de ejecución cuando el usuario introduce un valor para el ID de cliente (digamos 'ABCD') que sustituiría a la @InCustomerID por 'ABCD'

En tiempo de ejecución de la consulta sería la siguiente:

http://services.odata.org/Northwind/Northwind.svc/Customers $ filter = CustomerID eq 'ABCD' y eq País 'estadounidense'

En el caso anterior el usuario ha introducido los siguientes valores:? CustomerID => 'ABCD' y Country => 'estadounidense'

Mi pregunta es sobre el manejo de valores nulos en el filtro OData $. Si el usuario no ingresa ningún valor para CustomerID, entonces queremos seleccionar todos los clientes de un país específico.

En caso sql esto sería algo así como:

SELECT * FROM Clientes que ((CustomerID = @InCustomerID) o (@CustomerID es nulo)) y (País = @Country).

Esencialmente cómo manejar valores nulos o vacíos para que el predicado específico en la condición lógica sea siempre verdadero.

¿El filtrado OData habilita esta opción?

Respuesta

22

Puede comparar a nulo usando el operador de igualdad así:

$filter=CustomerID eq null 

En su caso la consulta degeneraría a algo como:

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

que deberían funcionar, pero no es muy agradable . ¿Consideró eliminar el predicado por completo en tal caso?

+0

No estoy de acuerdo en una solución limpia. Pero estamos restringidos porque el filtro está formado estáticamente y en tiempo de ejecución podemos obtener valores nulos para cierta entrada de filtro. En tal escenario, no hay una alternativa fácil. Sería difícil eliminar el predicado por completo, ya que eso implicaría una parte del proceso de analizar la URL y eliminar el predicado nulo. – Venki

+1

¿Funciona (null eq null) para usted? –

Cuestiones relacionadas