protected override async Task <EntityPagedResult <TenantReadModel> > Process(TenantPagedQuery request, CancellationToken cancellationToken) { var entityQuery = request.Query; var userName = request.Principal.Identity.Name; bool isGlobalAdministrator = request.Principal.IsInRole(Data.Constants.Role.GlobalAdministrator); // tenants that current user are members for var query = isGlobalAdministrator ? DataContext.Tenants : from t in DataContext.Tenants where ( from r in DataContext.TenantUserRoles where r.User.UserName == userName select r.TenantId ).Contains(t.Id) select t; // 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 <TenantReadModel> { Data = new List <TenantReadModel>() } } ; // page the query and convert to read model var result = await query .Sort(entityQuery.Sort) .Page(entityQuery.Page, entityQuery.PageSize) .ProjectTo <TenantReadModel>(Mapper.ConfigurationProvider) .ToListAsync(cancellationToken) .ConfigureAwait(false); return(new EntityPagedResult <TenantReadModel> { Total = total, Data = result.AsReadOnly() }); } }
public override async Task <IActionResult> OnGetAsync() { var query = CreateQuery(); var command = new TenantPagedQuery(User, query); var result = await Mediator.Send <EntityPagedResult <TenantReadModel> >(command); Total = result.Total; Items = result.Data; return(Page()); }