Esempio n. 1
0
        public override ResultTable ExecuteQueryGroup(QueryGroupRequest request)
        {
            var simpleFilters    = request.Filters.Where(f => !(f.Token is AggregateToken)).ToList();
            var aggregateFilters = request.Filters.Where(f => f.Token is AggregateToken).ToList();

            var keys = request.Columns.Select(t => t.Token).Where(t => !(t is AggregateToken)).ToHashSet();

            var allAggregates = request.AllTokens().OfType <AggregateToken>().ToHashSet();

            DEnumerableCount <T> plainCollection = Execute(new QueryRequest
            {
                Columns    = keys.Concat(allAggregates.Select(at => at.Parent).NotNull()).Distinct().Select(t => new Column(t, t.NiceName())).ToList(),
                Orders     = new List <Order>(),
                Filters    = simpleFilters,
                QueryName  = request.QueryName,
                Pagination = new Pagination.All(),
            }, GetQueryDescription());

            var groupCollection = plainCollection
                                  .GroupBy(keys, allAggregates)
                                  .Where(aggregateFilters)
                                  .OrderBy(request.Orders);

            var cols = request.Columns
                       .Select(column => (column, Expression.Lambda(column.Token.BuildExpression(groupCollection.Context), groupCollection.Context.Parameter))).ToList();

            var values = groupCollection.Collection.ToArray();

            return(values.ToResultTable(cols, values.Length, new Pagination.All()));
        }
Esempio n. 2
0
        /// <summary>
        /// 查询组
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public QueryGroupResponse QueryGroup(QueryGroupRequest request)
        {
            var response = new QueryGroupResponse();

            var datalist = _groupInfoRepository.QueryGroup(request.ImUserId, request.GroupName, request.PageIndex, request.PageSize, out var total);

            response.TotalCount = total;
            response.EntityList = datalist;
            return(response);
        }
Esempio n. 3
0
        public override async Task<ResultTable> ExecuteQueryGroupAsync(QueryGroupRequest request, CancellationToken token)
        {
            DQueryable<T> query = GetDQueryable(request);
            
            var values = await query.Query.ToArrayAsync(token);

            var cols = request.Columns
               .Select(column => (column, Expression.Lambda(column.Token.BuildExpression(query.Context), query.Context.Parameter))).ToList();

            return values.ToResultTable(cols, values.Length, new Pagination.All());
        }
Esempio n. 4
0
        public override ResultTable ExecuteQueryGroup(QueryGroupRequest request)
        {
            DQueryable<T> query = GetDQueryable(request);

            var values = query.Query.ToArray();

            var cols = request.Columns
               .Select(column => (column, Expression.Lambda(column.Token.BuildExpression(query.Context), query.Context.Parameter))).ToList();

            return values.ToResultTable(cols, values.Length, new Pagination.All());
        }
Esempio n. 5
0
        public static QueryGroupRequest ToRequest(this QueryGroupOptions options)
        {
            QueryDescription qd = GetQueryDescription(options.QueryName);

            ColumnOption.SetColumnTokens(options.ColumnOptions, qd, canAggregate: true);
            FilterOption.SetFilterTokens(options.FilterOptions, qd, canAggregate: true);
            OrderOption.SetOrderTokens(options.OrderOptions, qd, canAggregate: true);

            var request = new QueryGroupRequest
            {
                QueryName = options.QueryName,
                Filters   = options.FilterOptions.Select(f => f.ToFilter()).ToList(),
                Orders    = options.OrderOptions.Select(f => f.ToOrder()).ToList(),
                Columns   = options.ColumnOptions.Select(f => f.ToColumn()).ToList(),
            };

            return(request);
        }
Esempio n. 6
0
        private DQueryable<T> GetDQueryable(QueryGroupRequest request)
        {
            var simpleFilters = request.Filters.Where(f => !(f.Token is AggregateToken)).ToList();
            var aggregateFilters = request.Filters.Where(f => f.Token is AggregateToken).ToList();

            var keys = request.Columns.Select(t => t.Token).Where(t => !(t is AggregateToken)).ToHashSet();

            var allAggregates = request.AllTokens().OfType<AggregateToken>().ToHashSet();

            DQueryable<T> query = Query
                .ToDQueryable(GetQueryDescription())
                .SelectMany(request.Multiplications)
                .Where(simpleFilters)
                .GroupBy(keys, allAggregates)
                .Where(aggregateFilters)
                .OrderBy(request.Orders);
            return query;
        }
Esempio n. 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="imUserId"></param>
        /// <param name="groupname"></param>
        /// <param name="page"></param>
        /// <param name="limit"></param>
        /// <returns></returns>
        public ActionResult QueryGroup(string imUserId, string groupname, int page = 1, int limit = 20)
        {
            var request = new QueryGroupRequest();

            request.ImUserId  = imUserId.ToGuid();
            request.GroupName = groupname;
            request.PageIndex = page;
            request.PageSize  = limit;

            var response = _imUserInfoService.QueryGroup(request);

            if (response.IsSuccess && response.EntityList != null)
            {
                response.EntityList.ForEach(e =>
                {
                    e.GroupPicture = string.IsNullOrEmpty(e.GroupPicture) ? "../Content/Images/defaultimg.jpg" : e.GroupPicture;
                });
            }

            return(ToJsonResult(new { code = 0, data = response.EntityList.Select(e => e.As <GroupUserModel>()).ToList(), count = response.TotalCount }));
        }
Esempio n. 8
0
        public override ResultTable ExecuteQueryGroup(QueryGroupRequest request)
        {
            var simpleFilters    = request.Filters.Where(f => !(f.Token is AggregateToken)).ToList();
            var aggregateFilters = request.Filters.Where(f => f.Token is AggregateToken).ToList();

            var keys = request.Columns.Select(t => t.Token).Where(t => !(t is AggregateToken)).ToHashSet();

            var allAggregates = request.AllTokens().OfType <AggregateToken>().ToHashSet();

            DQueryable <T> query = Query
                                   .ToDQueryable(GetQueryDescription())
                                   .SelectMany(request.Multiplications)
                                   .Where(simpleFilters)
                                   .GroupBy(keys, allAggregates)
                                   .Where(aggregateFilters)
                                   .OrderBy(request.Orders);

            var cols = request.Columns
                       .Select(c => Tuple.Create(c, Expression.Lambda(c.Token.BuildExpression(query.Context), query.Context.Parameter))).ToList();

            var values = query.Query.ToArray();

            return(values.ToResultTable(cols, values.Length, new Pagination.All()));
        }
Esempio n. 9
0
 public ResultTable ExecuteGroupQuery(QueryGroupRequest request)
 {
     return(Execute(ExecuteType.ExecuteGroupQuery, request.QueryName, request, dqb => dqb.Core.Value.ExecuteQueryGroup(request)));
 }
Esempio n. 10
0
 public ResultTable ExecuteQueryGroup(QueryGroupRequest request)
 {
     return(Return(MethodInfo.GetCurrentMethod(), request.QueryName.ToString(),
                   () => DynamicQueryManager.Current.ExecuteGroupQuery(request)));
 }
Esempio n. 11
0
 public static void QueryGroupBatch(this QueryGroupRequest request, Action <ResultTable> onResult, Action @finally)
 {
     Finder.Manager.AssertFindable(request.QueryName);
     Enqueue(request, obj => onResult((ResultTable)obj), @finally);
 }
Esempio n. 12
0
 public override ResultTable ExecuteQueryGroup(QueryGroupRequest request)
 {
     throw new NotImplementedException();
 }
Esempio n. 13
0
 private static ResultTable QueryGroup(this QueryGroupRequest request)
 {
     Finder.Manager.AssertFindable(request.QueryName);
     return(Server.Return((IDynamicQueryServer s) => s.ExecuteQueryGroup(request)));
 }
Esempio n. 14
0
        public static object[][] RetrieveData(this PredictorEntity predictor)
        {
            QueryRequest mainQuery  = predictor.ToQueryRequest();
            ResultTable  mainResult = DynamicQueryManager.Current.ExecuteQuery(mainQuery);

            Implementations mainQueryImplementations = DynamicQueryManager.Current.GetEntityImplementations(predictor.Query.ToQueryName());

            List <MultiColumnQuery> mcqs = new List <MultiColumnQuery>();

            foreach (var c in predictor.Columns.Where(a => a.Type == PredictorColumnType.MultiColumn))
            {
                QueryGroupRequest multiColumnQuery  = predictor.ToMultiColumnQuery(mainQueryImplementations, c.MultiColumn);
                ResultTable       multiColumnResult = DynamicQueryManager.Current.ExecuteGroupQuery(multiColumnQuery);

                var entityGroupKey = multiColumnResult.Columns.FirstEx();
                var remainingKeys  = multiColumnResult.Columns.Take(c.MultiColumn.GroupKeys.Count).Skip(1).ToArray();
                var aggregates     = multiColumnResult.Columns.Take(c.MultiColumn.GroupKeys.Count).Skip(1).ToArray();

                var groupedValues = multiColumnResult.Rows.AgGroupToDictionary(row => (Lite <Entity>)row[entityGroupKey], gr =>
                                                                               gr.ToDictionaryEx(
                                                                                   row => row.GetValues(remainingKeys),
                                                                                   row => row.GetValues(aggregates),
                                                                                   ObjectArrayComparer.Instance));

                mcqs.Add(new MultiColumnQuery
                {
                    MultiColumnEntity = c.MultiColumn,
                    Query             = multiColumnQuery,
                    Result            = multiColumnResult,
                    GroupedValues     = groupedValues,
                    Aggregates        = aggregates,
                });
            }

            var dicMultiColumns = mcqs.ToDictionary(a => a.MultiColumnEntity);

            List <ColumnDescription> columns = new List <ColumnDescription>();

            columns.AddRange(mainResult.Columns.Select(rc => new ColumnDescription {
                Column = rc
            }));
            foreach (var mc in mcqs)
            {
                var distinctKeys = mc.GroupedValues.SelectMany(a => a.Value.Values).Distinct(ObjectArrayComparer.Instance).ToList();

                distinctKeys.Sort(ObjectArrayComparer.Instance);

                foreach (var k in distinctKeys)
                {
                    for (int i = 0; i < mc.Aggregates.Length; i++)
                    {
                        columns.Add(new ColumnDescription
                        {
                            MultiColumn    = mc.MultiColumnEntity,
                            Key            = k,
                            Column         = mc.Aggregates[i],
                            AggregateIndex = i,
                        });
                    }
                }
            }

            object[][] rows = new object[mainResult.Rows.Length][];

            for (int i = 0; i < rows.Length; i++)
            {
                var mainRow = mainResult.Rows[i];

                var row = new object[columns.Count];
                for (int j = 0; j < columns.Count; j++)
                {
                    var c = columns[j];

                    if (c.MultiColumn == null)
                    {
                        row[j] = mainRow[c.Column];
                    }
                    else
                    {
                        var dic   = dicMultiColumns[c.MultiColumn].GroupedValues;
                        var array = dic.TryGetC(mainRow.Entity)?.TryGetC(c.Key);
                        row[j] = array == null ? null : array[c.AggregateIndex];
                    }
                }
                rows[i] = row;
            }

            return(rows);
        }
 public Task <ResultTable> ExecuteGroupQueryAsync(QueryGroupRequest request, CancellationToken token)
 {
     return(ExecuteAsync(ExecuteType.ExecuteGroupQuery, request.QueryName, request, dqb => dqb.Core.Value.ExecuteQueryGroupAsync(request, token)));
 }
Esempio n. 16
0
 public override ResultTable ExecuteQueryGroup(QueryGroupRequest request) => Task.Run(() => ExecuteQueryGroupAsync(request, CancellationToken.None)).Result;
Esempio n. 17
0
 public abstract ResultTable ExecuteQueryGroup(QueryGroupRequest request);