protected override async Task <EntityPagedResult <MemberReadModel> > Process(MemberPagedQuery request, CancellationToken cancellationToken) { var entityQuery = request.Query; // users that are members for tenent var query = from c in DataContext.Users where ( from t in DataContext.TenantUserRoles where t.TenantId == request.TenantId select t.UserName ).Contains(c.UserName) select c; // build query from filter query = query .AsNoTracking() .Filter(entityQuery.Filter); // add raw query if (!string.IsNullOrEmpty(entityQuery.Query)) { query = query.Where(entityQuery.Query); } // get total for query var total = await query .CountAsync(cancellationToken) .ConfigureAwait(false); // short circuit if total is zero if (total == 0) { return new EntityPagedResult <MemberReadModel> { Data = new List <MemberReadModel>() } } ; // page the query and convert to read model var result = await query .Sort(entityQuery.Sort) .Page(entityQuery.Page, entityQuery.PageSize) .ProjectTo <MemberReadModel>(Mapper.ConfigurationProvider) .ToListAsync(cancellationToken) .ConfigureAwait(false); return(new EntityPagedResult <MemberReadModel> { Total = total, Data = result.AsReadOnly() }); } }
public async Task <IActionResult> OnGetAsync() { var query = CreateQuery(); var command = new MemberPagedQuery(User, query, Tenant.Value.Id); var result = await Mediator.Send(command); Total = result.Total; Items = result.Data; return(Page()); }