private Task Domain_ThreadQuery(IDomainExecutionContext context, ComBoost.Data.EntityQueryEventArgs <IThread> e)
        {
            var valueProvider        = context.DomainContext.GetRequiredService <IValueProvider>();
            var page                 = valueProvider.GetValue <int?>("page");
            EntityPagerOption option = context.DomainContext.Options.GetOption <EntityPagerOption>();

            if (option == null)
            {
                option = new EntityPagerOption();
                context.DomainContext.Options.SetOption(option);
                option.CurrentSize = 20;
            }
            option.CurrentPage = page ?? 1;
            return(Task.CompletedTask);
        }
Exemple #2
0
        public async Task <IViewModel <IThread> > ListThreads([FromService] IDatabaseContext databaseContext, [FromValue] string id)
        {
            var converter = TypeDescriptor.GetConverter(EntityDescriptor.GetMetadata <IThread>().KeyType);
            var idObj     = converter.ConvertFrom(id);
            var context   = databaseContext.GetWrappedContext <IThread>();
            var queryable = context.Query().Include(t => t.Member).Where(t => t.Forum.Index == idObj && !t.IsDeleted);
            var e         = new EntityQueryEventArgs <IThread>(queryable);

            await RaiseAsyncEvent(ThreadQueryEvent, e);

            queryable = e.Queryable;
            if (e.IsOrdered)
            {
                queryable = ((IOrderedQueryable <IThread>)queryable).ThenByDescending(t => t.CreateDate);
            }
            else
            {
                queryable = queryable.OrderByDescending(t => t.CreateDate);
            }
            IViewModel        model       = (IViewModel)Activator.CreateInstance(_ThreadViewModelType, _ThreadUnwrapMethod.Invoke(null, new object[] { queryable }));
            EntityPagerOption pagerOption = Context.DomainContext.Options.GetOption <EntityPagerOption>();

            if (pagerOption != null)
            {
                model.SetSize(pagerOption.CurrentSize);
            }
            await model.UpdateTotalPageAsync();

            if (pagerOption != null)
            {
                model.SetPage(pagerOption.CurrentPage);
            }
            await model.UpdateItemsAsync();

            return((IViewModel <IThread>)model);
        }