Пример #1
0
        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();
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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());
        }