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()
            });
        }
    }
Пример #2
0
        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());
        }