Пример #1
0
        /// <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));
        }