示例#1
0
 public async Task <ActionResult <IEnumerable> > GetGroupped([FromBody] GrouppedListRequest request)
 {
     if (!_permissionService.IsAllowed(new ActionRequestInfo(HttpContext, _implementationsContainer, request.EntityTypeName, ActionTypeEnum.Select)))
     {
         return(Unauthorized());
     }
     return(new ActionResult <IEnumerable>(await _entityHandler.GetGroupped(request)));
 }
示例#2
0
        public async Task <IEnumerable> GetGroupped(GrouppedListRequest request)
        {
            var entityType = _implementationsContainer.Reflector.GetType(request.EntityTypeName);
            var method     = _handlerInternal.GetType().GetMethod(nameof(EfCoreEntityHandlerInternal.GetGrouppedInternal), BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(entityType);
            var r          = this.GetType().GetMethod(nameof(CreateGenericGroupRequest), BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(entityType)
                             .Invoke(this, new object[] { request });
            var awaitable = method.Invoke(_handlerInternal, new object[] { r }) as Task <IEnumerable>;

            return(await awaitable);
        }
示例#3
0
 private GrouppedListRequest <TEntity> CreateGenericGroupRequest <TEntity>(GrouppedListRequest request)
 {
     return(new GrouppedListRequest <TEntity>()
     {
         Order = request.Order,
         StartIndex = request.StartIndex,
         Count = request.Count,
         Aggregations = request.Aggregations,
         GroupBy = request.GroupBy,
         Filters = request.Filters?.Select(x => FilterNodeConverter.ToExpression <TEntity>(x, _implementationsContainer.Reflector)).ToArray()
     });
 }
示例#4
0
        internal async Task <int> CountGroupsInternal <TEntity>(GrouppedListRequest <TEntity> request)
            where TEntity : class
        {
            using (var context = await GetReadBusinessDbContext())
            {
                var original = QueryBuilder.CreateSelectQuery(request, context);
                var query    = QueryBuilder.GroupQuery(request, original, out var grouppedItemType);

                var countMethod = typeof(EntityFrameworkQueryableExtensions).GetMethods()
                                  .Single(x => x.Name == nameof(EntityFrameworkQueryableExtensions.CountAsync) && x.GetParameters().Length == 1);
                countMethod = countMethod.MakeGenericMethod(grouppedItemType);
                var task = countMethod.Invoke(null, new object[] { query }) as Task <int>;
                return(await task);
            }
        }