public async Task <IForum[]> ListForums([FromService] IDatabaseContext databaseContext) { var context = databaseContext.GetWrappedContext <IForum>(); var queryable = context.Query().Include(t => t.Board); IValueProvider valueProvider = Context.DomainContext.GetRequiredService <IValueProvider>(); string id = valueProvider.GetValue <string>("id"); if (id != null) { var converter = TypeDescriptor.GetConverter(EntityDescriptor.GetMetadata <IBoard>().KeyType); var idObj = converter.ConvertFrom(id); queryable = queryable.Where(t => t.Board.Index == idObj); } var e = new EntityQueryEventArgs <IForum>(queryable); await RaiseAsyncEvent(ForumQueryEvent, e); queryable = e.Queryable; var items = await queryable.ToArrayAsync(); var obj = _ForumCastMethod.Invoke(null, new object[] { items }); obj = _ForumToArrayMethod.Invoke(null, new object[] { obj }); return((IForum[])obj); }
private Task Domain_EntityQuery(IDomainExecutionContext context, EntityQueryEventArgs <T> e) { var valueProvider = context.DomainContext.GetRequiredService <IValueProvider>(); var threadId = valueProvider.GetValue <Guid?>("id"); if (!threadId.HasValue) { return(Task.CompletedTask); } Guid key = threadId.Value; e.Queryable = e.Queryable.Wrap <IPost, T>().Where(t => t.Thread.Index == threadId.Value.Wrap()).Unwrap <IPost, T>(); return(Task.CompletedTask); }
private Task Domain_PostQuery(IDomainExecutionContext context, EntityQueryEventArgs <IPost> 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 = 10; } 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); }