/// <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); }
/// <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(); }
/// <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)); }
/// <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); }
/// <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)); }