2012-05-22 20 views
10

Estoy usando OData para paginar una larga lista de elementos devueltos por una llamada de API web. Puedo filtrar los datos a través de la url con el índice de inicio y final.

La pregunta que tengo es, ¿cómo sé el número total de elementos? De modo que puedo mostrar la página 1 de 3 (20 elementos) en mi dispositivo móvil que llama a la API web.

+0

Tenga en cuenta que el número total de elementos puede cambiar mientras el usuario lee las páginas. Por ejemplo, si los "elementos" en su lista son respuestas a una pregunta de SO, entonces el número puede haber aumentado de 20 a 30 antes de que el usuario haya llegado al final de la lista. Esto hace que el número total de páginas sea algo incierto. – Peter

Respuesta

3

Puede usar $ inlinecount = allpages en la consulta para obtener el recuento de todas las entidades en los resultados sin la parte superior y omitir. Por ejemplo:?

http://services.odata.org/OData/OData.svc/Products $ top = 1 & skip = 1 & $ inlinecount = allpages

devuelve un solo producto, sino también la cuenta en línea de 9 (ya que hay 9 productos en el conjunto de entidades).

+1

Gracias pero encontré el siguiente enlace desde el que dice que no se admite de fábrica:> http://thedevstop.wordpress.com/2012/04/05/adding-odata-inline-count-support-to-the- asp-net-web-api/ – amateur

+1

intentando esto con Microsoft.AspNet.WebApi.OData versión 0.1.0-alpha-120815 devuelve un 400 - {"Mensaje": "El parámetro de consulta '$ inlinecount' no es compatible."} –

+1

$ inlinecount está en desuso. Vea mi respuesta aquí: http: // stackoverflow.com/a/31004759/331281 – Dejan

6

Aquí hay un enlace a una versión que funciona, se ha implementado como un atributo QueryableAttribute. http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/88372a0b4ab9#src%2fMicrosoft.Web.Http.Data%2fQueryFilterAttribute.cs

edición: Use este enlace para obtener una explicación detallada -> http://www.strathweb.com/2012/08/supporting-odata-inlinecount-with-the-new-web-api-odata-preview-package/

+0

Esa URL no es válida en este momento: "URL no válida Lo lamentamos, pero la cadena de consulta de la URL no es válida. Si continúa teniendo problemas o desea enviarnos más información sobre este error, contáctenos. Regrese a la página de inicio de CodePlex. " –

+1

Se ha actualizado el enlace :) –

+1

Sé que esto es un poco viejo ahora, pero a cualquier persona que vea esto como un consejo, puede considerar Linq a Querystring, que sí admite $ inlinecount de la caja: https://github.com/ Roysvork/LinqToQuerystring/ –

2

Tuve el problema exacto la semana pasada. Check out Extending your ASP.NET Web API responses with useful metadata

Utilicé esta publicación y el código de muestra para obtener una cuadrícula de paginación funcionando con OData. Como se detalla en la muestra, creé un controlador de delegación para capturar HttpResponseMessage y envolverlo en metadatos personalizados que incluyen un recuento de elementos. También se crea un atributo personalizado, CustomQueryableAttribute, que hereda el QueryableAttribute predeterminado.

Puede sonar un poco complejo aquí, pero en realidad es bastante simple de implementar. Tuve algo funcionando en aproximadamente 30 minutos.

Esperemos que las versiones futuras de la API web tengan una compatibilidad más completa con OData.

EDITAR: El soporte de Odata NO se enviará con la API web. El atributo consultable se está eliminando para la versión RTM. El soporte de OData más completo estará disponible en algún momento después de la actualización inicial a través de un paquete Nuget por separado.

+0

movido de http://stackoverflow.com/questions/1130049 – Mark