public static IQueryable <T> ProcessSearchSettings <T, S>(PagingInstruction pager, IQueryable <T> query) { if (pager == null) { return(query); } query = ProcessSearchSorting <T, S>(pager, query); query = ProcessSearchPaging <T>(pager, query); return(query); }
private static IQueryable <T> ProcessSearchPaging <T>(PagingInstruction pager, IQueryable <T> query) { var skip = 0; var take = 0; pager.TotalRowCount = query.Count(); if (pager.TotalRowCount == 0) { return(query); } if (pager.PageSize > 0) { if (pager.PageIndex > Math.Round(pager.TotalRowCount / (decimal)pager.PageSize, MidpointRounding.AwayFromZero)) { pager.PageIndex = Convert.ToInt32(Math.Round(pager.TotalRowCount / (decimal)pager.PageSize, MidpointRounding.AwayFromZero)); } skip = pager.PageIndex * pager.PageSize; take = pager.PageSize; } if (pager.PageIndex < 0) { pager.PageIndex = 0; } if (pager.PageSize <= 0) { pager.PageSize = pager.TotalRowCount; } if (skip > 0) { query = query.Skip <T>(skip); } if (take > 0) { query = query.Take <T>(take); } return(query); }
public PaginationResult <TEntity> Paginate <TEntity, TSearch>(IQueryable <TEntity> query, TSearch searchObject, PagingInstruction pagingInstruction, Expression <Func <TEntity, bool> > predicate = null, string prefix = null) { var results = PaginateInternal(query, searchObject, pagingInstruction, predicate, prefix); var totalCount = pagingInstruction.TotalRowCount; var data = results.Item2.ToList(); return(new PaginationResult <TEntity> ( data, pagingInstruction.PageIndex, pagingInstruction.PageSize, totalCount )); }
private Tuple <IQueryable <TEntity>, IQueryable <TEntity> > PaginateInternal <TEntity, TSearch>(IQueryable <TEntity> query, TSearch searchObject, PagingInstruction pagingInstruction, Expression <Func <TEntity, bool> > predicate = null, string prefix = null) { var queryString = string.Empty; var parameters = new object[] { }; if (DynamicQueryableHelper.ParseSearchVars(searchObject, ref queryString, ref parameters)) { query = query.Where(queryString, parameters); } if (predicate != null) { query = query.Where(predicate); } var collection = DynamicQueryableHelper.ProcessSearchSettings <TEntity, TSearch>(pagingInstruction, query); return(new Tuple <IQueryable <TEntity>, IQueryable <TEntity> >(query, collection)); }
public IQueryable <TDatasource> ValidatePaging <TDatasource>(PagingInstruction pager, IQueryable <TDatasource> queryable) where TDatasource : class { return(DynamicQueryableHelper.ValidatePaging(pager, queryable)); }
public IQueryable <T> ProcessSearchSettings <T, S>(PagingInstruction pager, IQueryable <T> query) { return(DynamicQueryableHelper.ProcessSearchSettings <T, S>(pager, query)); }
public async Task <PaginationResult <TContract> > PaginateAsync <TEntity, TContract, TSearch>(IQueryable <TEntity> query, TSearch searchObject, PagingInstruction pagingInstruction, Expression <Func <TEntity, bool> > predicate = null, string prefix = null, CancellationToken cancellationToken = default(CancellationToken)) { var results = PaginateInternal(query, searchObject, pagingInstruction, predicate, prefix); var totalCount = pagingInstruction.TotalRowCount; var data = await ToListAsync(MapperExtension.ProjectTo <TEntity, TContract>(results.Item2), cancellationToken); return(new PaginationResult <TContract> ( data, pagingInstruction.PageIndex, pagingInstruction.PageSize, totalCount )); }
public static Task <PaginationResult <TEntity> > PaginateAsync <TEntity, TSearch>(this IQueryable <TEntity> query, TSearch searchObject, PagingInstruction pagingInstruction, Expression <Func <TEntity, bool> > predicate = null, string prefix = null, CancellationToken cancellationToken = default(CancellationToken)) { return(OrmHelper.PaginateAsync(query, searchObject, pagingInstruction, predicate, prefix, cancellationToken)); }
public static PaginationResult <TEntity> Paginate <TEntity, TSearch>(this IQueryable <TEntity> query, TSearch searchObject, PagingInstruction pagingInstruction, Expression <Func <TEntity, bool> > predicate = null, string prefix = null) { return(OrmHelper.Paginate(query, searchObject, pagingInstruction, predicate, prefix)); }
public static IQueryable <TDatasource> ValidatePaging <TDatasource>(this IQueryable <TDatasource> queryable, PagingInstruction pager) where TDatasource : class { return(OrmHelper.ValidatePaging(pager, queryable)); }
public static IQueryable <T> ProcessSearchSettings <T, S>(this IQueryable <T> query, PagingInstruction pager) { return(OrmHelper.ProcessSearchSettings <T, S>(pager, query)); }
private static IQueryable <T> ProcessSearchSorting <T, S>(PagingInstruction pager, IQueryable <T> query) { var type = typeof(T); if (pager.SortOptions == null || pager.SortOptions.Count == 0) { pager.SortOptions = new List <SortingInstruction>(); var columnName = default(string); if (type.GetProperties().Where(pname => DefaultSortFields.Contains(pname.Name)).Select(x => x.Name).Count() > 0) { columnName = type.GetProperties().Where(pname => DefaultSortFields.Contains(pname.Name)).Select(x => x.Name).First(); } if (string.IsNullOrWhiteSpace(columnName)) { throw new Exception("The Object does not seem to have any fields to use for sorting. This is required in order to handle paging correctly."); } pager.SortOptions.Add(new SortingInstruction() { Column = columnName, Direction = SortOrder.Ascending }); } var sortString = new StringBuilder(); foreach (var sortBy in pager.SortOptions) { if (sortString.Length > 0) { sortString.Append(","); } type = typeof(S); var columnName = sortBy.Column; var property = type.GetProperty(columnName); if (property == null) { property = type.GetProperty(columnName.ToUpperFirstLetter()); } if (property == null) { type = typeof(T); property = type.GetProperty(columnName); } if (property == null) { property = type.GetProperty(columnName.ToUpperFirstLetter()); } if (property == null) { continue; } var attribute = property.GetCustomAttribute <MapAttribute>(true); if (attribute != null) { columnName = attribute.Name; } sortString.AppendFormat("{0} {1}", columnName, sortBy.Direction); } return(query.OrderBy(sortString.ToString())); }
public static IQueryable <TDatasource> ValidatePaging <TDatasource>(PagingInstruction pager, IQueryable <TDatasource> queryable) where TDatasource : class { var skip = 0; var take = 0; if (pager == null) { return(queryable); } pager.TotalRowCount = queryable.Count(); if (pager.TotalRowCount == 0) { return(queryable); } if (pager.PageSize > 0) { if (pager.PageIndex > Math.Round(pager.TotalRowCount / (decimal)pager.PageSize, MidpointRounding.AwayFromZero)) { pager.PageIndex = Convert.ToInt32(Math.Round(pager.TotalRowCount / (decimal)pager.PageSize, MidpointRounding.AwayFromZero)); } skip = pager.PageIndex * pager.PageSize; take = pager.PageSize; } var t = typeof(TDatasource); if (pager.SortOptions == null || pager.SortOptions.Count == 0) { pager.SortOptions = new List <SortingInstruction>(); var columnName = default(string); // Attempt to assign a default sort because the client doesn't seem to care. if (t.GetProperties().Where(pname => DefaultSortFields.Contains(pname.Name)).Select(x => x.Name).Count() > 0) { columnName = t.GetProperties().Where(pname => DefaultSortFields.Contains(pname.Name)).Select(x => x.Name).First(); } else { var destElement = Activator.CreateInstance <TDatasource>(); var list = t.GetProperties(BindingFlags.Public | BindingFlags.Instance).AsQueryable(); if (list.Count() > 0) { columnName = list.First().Name; } } if (string.IsNullOrWhiteSpace(columnName)) { throw new Exception("The Object does not seem to have any sort fields. This is required in order to handle paging correctly."); } pager.SortOptions.Add(new SortingInstruction() { Column = columnName }); } var sortByString = new StringBuilder(); foreach (var sortby in pager.SortOptions) { if (sortByString.Length > 0) { sortByString.Append(","); } var columnName = sortby.Column; sortByString.AppendFormat("{0} {1}", columnName, sortby.Direction); } queryable = queryable.OrderBy(sortByString.ToString()); if (pager.PageIndex < 0) { pager.PageIndex = 0; } if (pager.PageSize <= 0) { pager.PageSize = pager.TotalRowCount; } if (skip > 0) { queryable = queryable.Skip(skip); } if (take > 0) { queryable = queryable.Take(take); } return(queryable); }