Hola que tal?, seguimos con esta serie de artículos sobre Web Api y Odata, esta vez veremos las opciones de consulta.
Una de las potencialidades de Odata es la capacidad de definir consultas personalizadas y parametrizadas mediante la url, siguiendo nuestros ejemplos anteriores, podemos tener:
http://localhost:1927/Odata/Asignaturas?$orderby=Semestre
A estos parámetros Odata les llamara “query Options”, dentro de las que nos ofrece Odata tenemos:
- $filter: Filtra los resultados, basados en una condición booleana.
- $inlinecount: Le indica al servidor que incluya dentro del resultado el total de entidades que se obtuvieron por medio de la query, eso está pensado en la páginación eficiente del lado del servidor
- $orderby: Ordena los resultado por algún criterio establecido en la query.
- $skip: omite los primeros n resultados, apropiado para la paginación.
- $top: Retorna solo los primeros n resultados.
Antes que nada, debemos habilitar la posibilidad de utilizar estas Query Options, y se debe hacer explícitamente, así que nos vamos al método Register del archivo WebApiConfig y des comentamos la línea que dice : config.EnableQuerySopport();
Si no te aparece esto, es por que debes instalar el WebTools 2012.2 Update, ya que la plantilla Web API incluye este código.
Algo importante de indicar, es que el método EnableQuerySupport habilita las consultas para todos las acciones de los controladores que retornen un tipo IQueryable. Si no quieres que esto suceda, y solo agregar esta característica a algunas acciones, debes agregar el atributo [Queryable] a cada acción:
[Queryable]
public override IQueryable<Asignatura> Get()
{
return asignaturas.AsQueryable();
}
Veamos entonces algunos ejemplos de consultas, si recordamos el artículo anterior teníamos:
http://localhost:1927/Odata/Asignaturas/
Para los filtros tenemos:
Retorna todos las asignaturas con semestre igual a 2:
http://localhost:1927/Odata/Asignaturas?$filter=Semestre eq 2
Retorna todas las asignaturas que tienen el string II dentro de Nombre:
http://localhost:1927/Odata/Asignaturas?$filter=substringof(‘II’,Nombre)
La misma consulta anterior, pero con el retorno de la cantidad de resultados:
http://localhost:1927/Odata/Asignaturas?$filter=substringof(‘II’,Nombre)&$inlinecount=allpages
El mismo ejemplo anterior, le agregamos ordenación descendente por ID
http://localhost:1927/Odata/Asignaturas?$filter=substringof(‘II’,Nombre)&$inlinecount=allpages&$orderby=ID desc
Como vez, bastante útil y fácil, en el próximo articulo revisaremos el tema de la paginación con un completo ejemplo, nos vemos!
@chalalo.