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