/// <summary> /// Generate Paginated List /// </summary> /// <param name="order">Ordem da Lista</param> /// <param name="initialPage">Página Inicial (Valor Padrão => [ 0 ])</param> /// <param name="recordsPerPage">Quantidade de Registros por Página (Valor Padrão => [ 50 ])</param> /// <returns>Retorna uma lista paginada</returns> public static IQueryable <T> Pagination <T>(this IQueryable <T> query, SortHelper order = null, int initialPage = 0, int recordsPerPage = 50) { IOrderedQueryable <T> queryOrdered = null; // Ordenation if (order == null || order.GetFieldOrder() == null || string.IsNullOrEmpty(order.GetFieldOrder().FieldName)) { queryOrdered = query.OrderByMemberDescending(string.Concat(typeof(T).Name, "Id")); } else { if (order.GetFieldOrder().FieldTypeOrderBy == "DESC") { queryOrdered = query.OrderByMemberDescending(order.GetFieldOrder().FieldName); } else { queryOrdered = query.OrderByMember(order.GetFieldOrder().FieldName); } foreach (var then in order.GetFieldsThen()) { if (then.FieldTypeThenBy == "DESC") { queryOrdered = queryOrdered.ThenByMemberDescending(then.FieldName); } else { queryOrdered = queryOrdered.ThenByMember(then.FieldName); } } } // Pagination if (initialPage > 0) { initialPage--; } if (recordsPerPage > 100) { recordsPerPage = 100; } return(queryOrdered.Skip(initialPage * recordsPerPage).Take(recordsPerPage)); }