Esempio n. 1
0
        /// <summary>
        /// Get list result model
        /// </summary>
        /// <typeparam name="TInput"></typeparam>
        /// <typeparam name="TOutput"></typeparam>
        /// <param name="queriable"></param>
        /// <param name="requestModel"></param>
        /// <param name="isSorting"></param>
        /// <param name="selector"></param>
        /// <returns></returns>
        public static async Task <BaseListResultViewModel <TOutput> > ToListModel <TInput, TOutput>(
            this IQueryable <TInput> queriable,
            BaseListRequestViewModel requestModel,
            bool isSorting,
            Func <TInput, TOutput> selector)
            where TOutput : class
        {
            if (requestModel == null)
            {
                throw new ArgumentNullException(nameof(requestModel));
            }

            if (selector == null)
            {
                throw new ArgumentNullException(nameof(selector));
            }

            var baseList = new BaseListResultViewModel <TOutput>
            {
                PageNumber = requestModel.PageNumber,
                PageSize   = requestModel.PageSize,
                Data       = (await queriable
                              .ApplyList(requestModel, isSorting)
                              .ToListAsync())
                             .Select(selector)
                             .ToList()
            };

            baseList.CheckAndSetNext();
            return(baseList);
        }
Esempio n. 2
0
        /// <summary>
        /// Process Queriable
        /// </summary>
        /// <param name="queriable"></param>
        /// <param name="requestModel"></param>
        /// <param name="isSorting"></param>
        /// <param name="selector"></param>
        /// <typeparam name="TInput"></typeparam>
        /// <exception cref="ArgumentNullException"></exception>
        public static async Task ProcessQueriable <TInput, TOutput>(
            this BaseListResultViewModel <TOutput> baseList, IQueryable <TInput> queriable,
            BaseListRequestViewModel requestModel, bool isSorting,
            Func <TInput, TOutput> selector)
            where TOutput : class
        {
            if (requestModel == null)
            {
                throw new ArgumentNullException(nameof(requestModel));
            }

            if (baseList == null)
            {
                throw new ArgumentNullException(nameof(baseList));
            }

            baseList.PageNumber = requestModel.PageNumber;
            baseList.PageSize   = requestModel.PageSize;

            baseList.Data = (await queriable
                             .ApplyList(requestModel, isSorting)
                             .ToListAsync())
                            .Select(selector)
                            .ToList();

            baseList.CheckAndSetNext();
        }
Esempio n. 3
0
 /// <summary>
 /// Get list result model
 /// </summary>
 /// <typeparam name="TInput"></typeparam>
 /// <typeparam name="TOutput"></typeparam>
 /// <param name="queriable"></param>
 /// <param name="requestModel"></param>
 /// <param name="selector"></param>
 /// <returns></returns>
 public static async Task <BaseListResultViewModel <TOutput> > ToListModel <TInput, TOutput>(
     this IQueryable <TInput> queriable,
     BaseListRequestViewModel requestModel,
     Func <TInput, TOutput> selector)
     where TOutput : class
 {
     return(await ToListModel <TInput, TOutput>(queriable, requestModel, true, selector));
 }
Esempio n. 4
0
 /// <summary>
 /// Process Queriable
 /// </summary>
 /// <param name="queriable"></param>
 /// <param name="requestModel"></param>
 /// <param name="selector"></param>
 /// <typeparam name="TInput"></typeparam>
 public static async Task ProcessQueriable <TInput, TOutput>(
     this BaseListResultViewModel <TOutput> baseList, IQueryable <TInput> queriable,
     BaseListRequestViewModel requestModel,
     Func <TInput, TOutput> selector)
     where TOutput : class
 {
     await ProcessQueriable(baseList, queriable, requestModel, true, selector);
 }
        /// <summary>
        /// Apply list paging and sorting
        /// </summary>
        /// <typeparam name="T">List domain entity type</typeparam>
        /// <param name="source">Domain Entities queryable source</param>
        /// <param name="listRequest">List model to apply on Source</param>
        /// <param name="isSorting">Using a sorting process</param>
        /// <returns>Queryable with applied list request model</returns>
        public static IQueryable <T> ApplyList <T>(this IQueryable <T> source,
                                                   BaseListRequestViewModel listRequest, bool isSorting)
        {
            if (isSorting)
            {
                source = source.ApplySorting(listRequest);
            }

            return(source.ApplyPaginations(listRequest));
        }
        /// <summary>
        /// Apply list paging
        /// </summary>
        /// <typeparam name="T">List domain entity type</typeparam>
        /// <param name="source">Domain Entities queryable source</param>
        /// <param name="listRequest">List model to apply on Source</param>
        /// <returns></returns>
        public static IQueryable <T> ApplyPaginations <T>(this IQueryable <T> source,
                                                          BaseListRequestViewModel listRequest)
        {
            if (listRequest == null)
            {
                throw new ArgumentNullException(nameof(listRequest));
            }

            var pageSize = listRequest.PageSize == int.MaxValue ? int.MaxValue : listRequest.PageSize + 1;

            return(source
                   .Skip((listRequest.PageNumber - 1) * listRequest.PageSize)
                   .Take(pageSize));
        }
        /// <summary>
        /// Validated if particular Domain Entity type could be used with BaseList Request object
        /// </summary>
        /// <typeparam name="T">Domain entity Type</typeparam>
        /// <param name="listRequest">Base List request object</param>
        /// <returns>False in case it is not possible to apply this list object on provided Entity type.</returns>
        public static bool IsDomainSortingValid <T>(this BaseListRequestViewModel listRequest)
        {
            if (listRequest == null)
            {
                throw new ArgumentNullException(nameof(listRequest));
            }

            if (string.IsNullOrEmpty(listRequest.SortField))
            {
                return(true);
            }

            return(typeof(T).GetProperties()
                   .Any(x => string.Equals(x.Name, listRequest.SortField,
                                           StringComparison.OrdinalIgnoreCase)));
        }
        /// <summary>
        /// Apply list sorting
        /// </summary>
        /// <typeparam name="T">List domain entity type</typeparam>
        /// <param name="source">Domain Entities queryable source</param>
        /// <param name="listRequest">List model to apply on Source</param>
        /// <returns></returns>
        public static IQueryable <T> ApplySorting <T>(this IQueryable <T> source,
                                                      BaseListRequestViewModel listRequest)
        {
            if (listRequest == null)
            {
                throw new ArgumentNullException(nameof(listRequest));
            }

#pragma warning disable IDE0059 // Unnecessary assignment of a value
            var sortField = string.Empty;
#pragma warning restore IDE0059 // Unnecessary assignment of a value


            if (!string.IsNullOrEmpty(listRequest.SortField))
            {
                sortField = listRequest.SortField;
            }
            else
            {
                var myType = typeof(T);

                sortField = myType.GetProperties()
                            .FirstOrDefault()
                            ?.Name;
            }

            if (listRequest.SortAscending)
            {
                source = source.OrderByProperty(sortField);
            }
            else
            {
                source = source.OrderByPropertyDescending(sortField);
            }

            return(source);
        }
Esempio n. 9
0
 /// <summary>
 /// Get list result model
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="queriable"></param>
 /// <param name="requestModel"></param>
 /// <returns></returns>
 public static async Task <BaseListResultViewModel <T> > ToListModel <T>(
     this IQueryable <T> queriable,
     BaseListRequestViewModel requestModel) where T : class
 {
     return(await ToListModel <T>(queriable, requestModel, true));
 }
 /// <summary>
 /// Apply list paging and sorting
 /// </summary>
 /// <typeparam name="T">List domain entity type</typeparam>
 /// <param name="source">Domain Entities queryable source</param>
 /// <param name="listRequest">List model to apply on Source</param>
 /// <returns>Queryable with applied list request model</returns>
 public static IQueryable <T> ApplyList <T>(this IQueryable <T> source,
                                            BaseListRequestViewModel listRequest)
 {
     return(source.ApplyList(listRequest, true));
 }