Thursday, February 2, 2012

Page through potentially large NHibernate criteria query results

  1. public static IEnumerable<T> Enumerate<T>(this ICriteria criteria, int pageSize = 1000)
  2. {
  3. var entityCount = CriteriaTransformer.TransformToRowCount(criteria).UniqueResult<int>();
  4. var pageCount = (int) Math.Ceiling(entityCount/(double) pageSize);
  5. criteria = CriteriaTransformer.Clone(criteria).SetMaxResults(pageSize);
  6. return Enumerable.Range(0, pageCount)
  7. .SelectMany(pageNum => criteria.SetFirstResult(pageNum*pageSize).List<T>());
  8. }
NHibernate

No comments: