|
Answer:
Here is sample code demonstrating how to execute a PagedRdbQuery, which is the ideal query to use for returning large result sets.
This example can also be found in the IdeaBlade DevForce Help Reference (may vary slightly):
public void SamplePagedQuery() {
PersistenceManager pm = PersistenceManager.DefaultManager;
// Query orders in descending date sequence.
RdbQuery aQuery = new RdbQuery(typeof(Order));
aQuery.AddOrderBy(Order.OrderDateEntityColumn, ListSortDirection.Descending);
// Build a paged query to retrieve 10 items at a time.
PagedRdbQuery pagedQuery = new PagedRdbQuery(aQuery);
pagedQuery.PageSize = 10;
// Specify whether the last item of the page will be first item on next page.
pagedQuery.PagesShouldOverlap = false;
while (true) {
EntityList<Order> orders = pm.GetEntities<Order>(pagedQuery);
Console.WriteLine("Current page = " + pagedQuery.CurrentPage.ToString());
Console.WriteLine("Order count for this page = " + orders.Count.ToString());
foreach (Order anOrder in orders) {
Console.WriteLine(" Order id = " + anOrder.Id.ToString() + ", date = " + anOrder.OrderDate);
}
if (pagedQuery.IsLastPage) break;
// Advance the query.
pagedQuery.NextPage();
}
}
The key points are:
- Construct a paged query from another ordered query.
- Set the PageSize – the number of items to retrieve at a time (default is 25).
- Specify page overlapping – whether the last item of the page will be the first item on next page (default is true).
- Use NextPage, PrevPage, and CurrentPage to specify the result page to be returned when next query is executed.
|