public async Task <IEnumerable <TEntity> > Find(PaginationState pgState = null) { try { return(await Task.Run(() => _prnt.DbSet .SkipRemoved() .SkipTake(pgState ?? _prnt.PgnState) .ExtWhere(pgState ?? _prnt.PgnState))); } catch (Exception ex) { Debug.WriteLine(ex.StackTrace); } return(null); }
public static IQueryable <TEntity> SkipTake <TEntity>(this IQueryable <TEntity> items, PaginationState state) where TEntity : ExtEntity => items.Skip(state.ToSkip).Take(state.RowsCountPerPage);
public static IEnumerable <TEntity> ExtOrder <TEntity>(this IEnumerable <TEntity> items, PaginationState state) where TEntity : ExtEntity { var func = new Func <TEntity, object>(obj => obj.GetType().GetProperty(state.SortField)?.GetValue(obj, null)?.ToString() ?? string.Empty); return((state.IsOrderByDesc) ? items.OrderByDescending(func).AsEnumerable() : items.OrderBy(func).AsEnumerable()); }
public static IEnumerable <TEntity> ExtWhere <TEntity>(this IEnumerable <TEntity> items, PaginationState state) where TEntity : ExtEntity { var func = new Func <TEntity, bool>((obj) => { var type = obj.GetType(); if (!state.IsSearchTextEmpty()) { var st = state.SearchText.ToLower().Trim(); if (state.IsFilterFieldEmpty()) { var sb = new StringBuilder(); type.GetProperties().ToList().ForEach(p => { var val = p.GetValue(obj, null)?.ToString() ?? string.Empty; sb.Append(val.ToLower().Trim()).Append(' '); }); return(sb.ToString().Contains(st)); } else { var ffVal = type.GetProperty(state.FilterField).GetValue(obj, null)?.ToString() ?? string.Empty; return(ffVal.ToLower().Trim().Contains(st)); } } return(true); }); return(items.Where(func).ExtOrder(state)); }