using System.Linq.Expressions; using BlackRock.Reporting.API.Mediator; using BlackRock.Reporting.API.Mediator.Model; namespace BlackRock.Reporting.API.Extensions { public static class IQueryableExtensions { public static IQueryable ApplyOrdering(this IQueryable query, IPaggingAndFiltering queryObj, Dictionary>> columnsMap) { if (string.IsNullOrWhiteSpace(queryObj.SortBy) || !columnsMap.ContainsKey(queryObj.SortBy)) return query; if (queryObj.IsSortAscending) return query.OrderBy(columnsMap[queryObj.SortBy]); return query.OrderByDescending(columnsMap[queryObj.SortBy]); } public static IQueryable ApplyPagging(this IQueryable query, IPaggingAndFiltering queryObj) { if (queryObj.Page <= 0) queryObj.Page = 1; if (queryObj.PageSize <= 0) queryObj.PageSize = 10; return query.Skip((queryObj.Page - 1) * queryObj.PageSize) .Take(queryObj.PageSize); } } }