public async void Reload() { if (IsLoading) { return; } data.Clear(); IsLoading = true; OnUpdated(); try { var queryTask = query.Skip(data.Count).Take(batchSize).ToListAsync(); var countTask = query.CountAsync(); await Task.WhenAll(queryTask, countTask); data.AddRange(queryTask.Result); var count = countTask.Result; HasMore = data.Count < count; } finally { IsLoading = false; OnUpdated(); } }
protected virtual AsyncTableQuery <T1> ApplyFilters(AsyncTableQuery <T1> query, T2 filter) { if (filter.Ids != null && filter.Ids.Any()) { query = query.Where(x => filter.Ids.Contains(x.Id)); } if (filter.Skip > 0) { query = query.Skip(filter.Skip.Value); } if (filter.Take > 0) { query = query.Take(filter.Take.Value); } return(query); }
/// <summary> /// 分页查询,调用此方法前必须进行排序 /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="source"></param> /// <param name="current"></param> /// <param name="pageSize"></param> /// <returns></returns> public static async Task <PagedModel <TEntity> > PagingAsync <TEntity>( this AsyncTableQuery <TEntity> source, int current = IPagedModel.DefaultCurrent, int pageSize = IPagedModel.DefaultPageSize) where TEntity : new() { var skipCount = (current - 1) * pageSize; var total = await source.CountAsync(); var dataSource = await source.Skip(skipCount).Take(pageSize).ToListAsync(); var pagedModel = new PagedModel <TEntity> { Current = current, PageSize = pageSize, Total = total, DataSource = dataSource, }; return(pagedModel); }
private async Task <IList <T> > GetManyReady(Expression <Func <T, bool> > filter = null, Func <AsyncTableQuery <T>, AsyncTableQuery <T> > order = null, int skip = 0, int take = 0, bool includeDeleted = false) { AsyncTableQuery <T> tableQuery = _mainContext.GetCurrentContext().Table <T>(); if (!includeDeleted) { tableQuery = tableQuery.Where(q => q.IsDeleted.Equals(includeDeleted)); } if (filter != null) { tableQuery = tableQuery.Where(filter); } if (order != null) { tableQuery = order(tableQuery); } if (order == null) { tableQuery = tableQuery.OrderByDescending(b => b.CreatedDate); } if (skip > 0) { tableQuery = tableQuery.Skip(skip); } if (take > 0) { tableQuery = tableQuery.Take(take); } return(await tableQuery.ToListAsync()); }