2012-05-22 25 views
10

Tôi đang sử dụng OData để phân trang danh sách dài các mục được trả lại từ cuộc gọi api trên web. Tôi có thể lọc dữ liệu qua url với chỉ mục bắt đầu và kết thúc.

Câu hỏi tôi có là, làm cách nào để biết tổng số mục? Vì vậy, tôi có thể hiển thị Trang 1 của 3 (20 mục) trên thiết bị di động của tôi gọi là api trên web.

+0

Xin lưu ý rằng tổng số mục có thể thay đổi trong khi người dùng đang đọc các trang. Ví dụ: nếu "mục" trong danh sách của bạn là câu trả lời cho câu hỏi SO thì số có thể tăng từ 20 lên 30 trước khi người dùng đã đến cuối danh sách. Điều này làm cho tổng số trang có phần không chắc chắn. – Peter

Trả lời

3

Bạn có thể sử dụng $ inlinecount = tất cả các trang trong truy vấn để nhận số lượng tất cả các thực thể trong kết quả mà không cần đầu và bỏ qua. Ví dụ:

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

Trả về một sản phẩm duy nhất mà còn đếm inline 9 (kể từ khi có 9 sản phẩm trong tập thực thể).

+1

Cảm ơn nhưng đã tìm thấy liên kết sau từ đó tuyên bố nó không được hỗ trợ ra khỏi hộp -> http://thedevstop.wordpress.com/2012/04/05/adding-odata-inline-count-support-to-the- asp-net-web-api/ – amateur

+1

cố gắng với Microsoft.AspNet.WebApi.OData phiên bản 0.1.0-alpha-120815 trả về 400 - {"Message": "Tham số truy vấn '$ inlinecount' không được hỗ trợ."} –

+1

$ inlinecount không được dùng nữa. Xem câu trả lời của tôi ở đây: http: // stackoverflow.com/a/31004759/331281 – Dejan

6

Đây là liên kết tới phiên bản hoạt động, nó đã được triển khai dưới dạng QueryableAttribute. http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/88372a0b4ab9#src%2fMicrosoft.Web.Http.Data%2fQueryFilterAttribute.cs

chỉnh sửa: Sử dụng liên kết này cho một Giải thích chi tiết -> http://www.strathweb.com/2012/08/supporting-odata-inlinecount-with-the-new-web-api-odata-preview-package/

+0

URL đó không hợp lệ tại thời điểm này: "URL Không Hợp lệ Chúng tôi rất tiếc, nhưng chuỗi truy vấn của URL không hợp lệ. Nếu bạn tiếp tục gặp sự cố hoặc muốn gửi cho chúng tôi thêm thông tin về lỗi này, vui lòng liên hệ với chúng tôi. Quay lại Trang chủ CodePlex. " –

+1

Cập nhật liên kết :) –

+1

Tôi biết điều này là một chút cũ, nhưng với bất cứ ai xem này cho lời khuyên bạn có thể muốn xem xét LINQ to Querystring, mà không hỗ trợ $ inlinecount ra khỏi hộp: https://github.com/ Roysvork/LinqToQuerystring/ –

3

Hãy thử phương pháp này: http://www.strathweb.com/2012/08/supporting-odata-inlinecount-with-the-new-web-api-odata-preview-package/

Nó sử dụng các gói OData Web API mới nhất. Cho đến khi gói OData Web API cuối cùng được vận chuyển (đôi khi vào mùa thu này, nên vào khoảng tháng 11), khi $ inlinecount được hỗ trợ ra khỏi hộp, giải pháp này có thể là đặt cược tốt nhất.

+0

Làm việc cho tôi. Mát mẻ! – asa

2

Tôi đã gặp sự cố chính xác vào tuần trước. Check out Extending your ASP.NET Web API responses with useful metadata

Tôi đã sử dụng mã đăng bài và mã mẫu này để tạo một mạng phân trang và chạy bằng OData. Như được trình bày chi tiết trong ví dụ, tôi đã tạo một trình xử lý ủy nhiệm để nắm bắt HttpResponseMessage và bọc nó trong siêu dữ liệu tùy chỉnh bao gồm một số mục. Thuộc tính tùy chỉnh, CustomQueryableAttribute, cũng được tạo kế thừa QueryableAttribute mặc định.

Nghe có vẻ hơi phức tạp ở đây nhưng thực sự khá đơn giản để triển khai. Tôi đã có một cái gì đó và chạy trong khoảng 30 phút.

Hy vọng các phiên bản tương lai của API Web có hỗ trợ OData hoàn chỉnh hơn.

EDIT: Hỗ trợ Odata sẽ KHÔNG được gửi bằng API Web. Thuộc tính có thể truy vấn được xóa cho bản phát hành RTM. Hỗ trợ OData hoàn chỉnh hơn sẽ có sẵn đôi khi sau lần khởi động ban đầu thông qua gói Nuget riêng biệt.

+0

được chuyển từ http://stackoverflow.com/questions/1130049 – Mark