示例#1
0
        /// <summary>
        /// Advanced option of GetPaged
        /// It automatically returns mapped result and it does not return the query, since it is already resolved
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="U"></typeparam>
        /// <param name="query"></param>
        /// <param name="pagedRequest"></param>
        /// <returns></returns>
        public async Task <PagedResult <U> > GetPaged <T, U>(IQueryable <T> query, PagedRequest <T, U> pagedRequest) where T : class, new() where U : class, new()
        {
            Type objectType = query.FirstOrDefault()?.GetType();

            if (objectType != null)
            {
                var result = new PagedResult <T>
                {
                    PageIndex = pagedRequest.PageIndex,
                    PageSize  = pagedRequest.PageSize,
                };

                if (pagedRequest.PropertyFilterConfigs != null &&
                    pagedRequest.PropertyFilterConfigs.Any(pfc => pfc.SortDirection.HasValue))
                {
                    query = SortObject(query, pagedRequest.PropertyFilterConfigs);
                }

                if (pagedRequest.Where != null)
                {
                    query = FilterObject(query, pagedRequest);
                }

                if (!string.IsNullOrEmpty(pagedRequest.SearchQuery))
                {
                    query = SearchObject(query, pagedRequest);
                }

                var resultQuery = ApplyPagination(query, pagedRequest);

                result.RowCount  = query.Count();
                result.PageCount = (int)Math.Ceiling((double)result.RowCount / pagedRequest.PageSize);

                return(await Task.FromResult(result.TransformResult(pagedRequest, resultQuery)));
            }

            return(new PagedResult <U>()
            {
                Results = new List <U>()
            });
        }
示例#2
0
        public async Task <PagedResult <U> > GetPaged <T, U>(IQueryable <T> query, PagedRequest <T, U> pagedRequest) where T : class, new() where U : class, new()
        {
            Type objectType = query.FirstOrDefault()?.GetType();

            if (objectType != null)
            {
                var result = new PagedResult <T>
                {
                    PageIndex = pagedRequest.PageIndex,
                    PageSize  = pagedRequest.PageSize,
                };

                if (pagedRequest.PropertyFilterConfigs != null && pagedRequest.PropertyFilterConfigs.Any(pfc => pfc.SortDirection.HasValue))
                {
                    query = SortObject(query, pagedRequest.PropertyFilterConfigs);
                }

                if (pagedRequest.Where != null)
                {
                    query = FilterObject(query, pagedRequest);
                }

                var resultQuery = ApplyPagination(query, pagedRequest);

                result.RowCount  = query.Count();
                result.PageCount = (int)Math.Ceiling((double)result.RowCount / pagedRequest.PageSize);

                result.Results = pagedRequest.ReturnQueryOnly ? new List <T>() : await Task.FromResult(resultQuery.ToList());

                result.ResultQuery = pagedRequest.ReturnResultsOnly ? null : resultQuery;
                return(result.TransformResult(pagedRequest.MappingFunction));
            }

            return(new PagedResult <U>
            {
                Results = new List <U>(),
                ResultQuery = null
            });
        }
示例#3
0
        public static async Task <PagedResult <U> > GetFiltered <T, U>(this IQueryable <T> query, PagedRequest <T, U> pagedRequest) where T : class, new() where U : class, new()
        {
            Type objectType = query.FirstOrDefault()?.GetType();

            if (objectType != null)
            {
                var result = new PagedResult <T>
                {
                    PageIndex = pagedRequest.PageIndex,
                    PageSize  = pagedRequest.PageSize,
                };

                if (pagedRequest.Sorting != null && pagedRequest.Sorting.Keys.Count > 0)
                {
                    query = SortObject(pagedRequest.Sorting, query);
                }

                if (pagedRequest.PropertyFilterConfigs != null && pagedRequest.PropertyFilterConfigs.Any())
                {
                    query = query.FilterObject(pagedRequest);
                }

                result.RowCount  = query.Count();
                result.PageCount = (int)Math.Ceiling((double)result.RowCount / pagedRequest.PageSize);

                result.Results = pagedRequest.ReturnQueryOnly ? new List <T>() : await Task.FromResult(query.ToList());

                result.ResultQuery = pagedRequest.ReturnResultsOnly ? null : query;
                return(result.TransformResult(pagedRequest.MappingFunction));
            }

            return(new PagedResult <U>
            {
                Results = new List <U>(),
                ResultQuery = null
            });
        }