Showing posts with label NHibernate. Show all posts
Showing posts with label NHibernate. Show all posts

Thursday, February 2, 2012

Page through potentially large NHibernate criteria query results

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