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); }
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); }