Ejemplo n.º 1
0
        public static DQueryable <T> SelectMany <T>(this DQueryable <T> query, CollectionElementToken cet)
        {
            Type elementType = cet.Parent.Type.ElementType();

            var collectionSelector = Expression.Lambda(typeof(Func <,>).MakeGenericType(typeof(object), typeof(IEnumerable <>).MakeGenericType(elementType)),
                                                       Expression.Call(miDefaultIfEmptyE.MakeGenericMethod(elementType),
                                                                       cet.Parent.BuildExpression(query.Context)),
                                                       query.Context.Parameter);

            var elementParameter = cet.CreateParameter();

            var properties = query.Context.Replacemens.Values.And(cet.CreateExpression(elementParameter));

            var ctor = TupleReflection.TupleChainConstructor(properties);

            var resultSelector = Expression.Lambda(Expression.Convert(ctor, typeof(object)), query.Context.Parameter, elementParameter);

            var resultQuery = query.Query.Provider.CreateQuery <object>(Expression.Call(null, miSelectMany.MakeGenericMethod(typeof(object), elementType, typeof(object)),
                                                                                        new Expression[] { query.Query.Expression, Expression.Quote(collectionSelector), Expression.Quote(resultSelector) }));

            var parameter = Expression.Parameter(typeof(object));

            var newReplacements = query.Context.Replacemens.Keys.And(cet).Select((a, i) => new
            {
                Token      = a,
                Expression = TupleReflection.TupleChainProperty(Expression.Convert(parameter, ctor.Type), i)
            }).ToDictionary(a => a.Token, a => a.Expression);

            return(new DQueryable <T>(resultQuery,
                                      new BuildExpressionContext(ctor.Type, parameter, newReplacements)));
        }
Ejemplo n.º 2
0
        public void UpdateMultiplyMessage()
        {
            string message = CollectionElementToken.MultipliedMessage(Request.Multiplications, EntityType);

            tbMultiplications.Text       = message;
            brMultiplications.Visibility = message.HasText() ? Visibility.Visible : Visibility.Collapsed;
        }
Ejemplo n.º 3
0
        public QueryRequest UpdateMultiplyMessage(bool updateSimpleFilters)
        {
            var result = GetQueryRequest(updateSimpleFilters);

            string message = CollectionElementToken.MultipliedMessage(result.Multiplications(), EntityType);

            tbMultiplications.Text       = message;
            brMultiplications.Visibility = message.HasText() ? Visibility.Visible : Visibility.Collapsed;

            return(result);
        }
Ejemplo n.º 4
0
        protected internal virtual PartialViewResult Search(ControllerBase controller, QueryRequest request, bool allowSelection, bool navigate, bool showFooter, Context context)
        {
            if (!Finder.IsFindable(request.QueryName))
            {
                throw new UnauthorizedAccessException(NormalControlMessage.ViewForType0IsNotAllowed.NiceToString().FormatWith(request.QueryName));
            }

            QuerySettings    settings = QuerySettings[request.QueryName];
            QueryDescription qd       = DynamicQueryManager.Current.QueryDescription(request.QueryName);

            if (settings.HiddenColumns != null)
            {
                if (settings.HiddenColumns.Any(a => a.Token == null))
                {
                    using (ExecutionMode.Global())
                        ColumnOption.SetColumnTokens(settings.HiddenColumns, qd, canAggregate: false);
                }

                request.Columns.AddRange(settings.HiddenColumns.Select(c => c.ToColumn(qd, isVisible: false)));
            }

            ResultTable queryResult = DynamicQueryManager.Current.ExecuteQuery(request);

            controller.ViewData.Model = context;

            controller.ViewData[ViewDataKeys.AllowSelection] = allowSelection;
            controller.ViewData[ViewDataKeys.Navigate]       = navigate;
            controller.ViewData[ViewDataKeys.ShowFooter]     = showFooter;


            controller.ViewData[ViewDataKeys.QueryDescription] = qd;

            Type   entitiesType = Lite.Extract(qd.Columns.SingleEx(a => a.IsEntity).Type);
            string message      = CollectionElementToken.MultipliedMessage(request.Multiplications, entitiesType);

            if (message.HasText())
            {
                controller.ViewData[ViewDataKeys.MultipliedMessage] = message;
            }

            controller.ViewData[ViewDataKeys.Results]      = queryResult;
            controller.ViewData[ViewDataKeys.QueryRequest] = request;

            controller.ViewData[ViewDataKeys.Formatters]      = queryResult.Columns.Select((c, i) => new { c, i }).ToDictionary(c => c.i, c => settings.GetFormatter(c.c.Column));
            controller.ViewData[ViewDataKeys.EntityFormatter] = settings.EntityFormatter;
            controller.ViewData[ViewDataKeys.RowAttributes]   = settings.RowAttributes;

            return(new PartialViewResult
            {
                ViewName = SearchResultsView,
                ViewData = controller.ViewData,
                TempData = controller.TempData
            });
        }
Ejemplo n.º 5
0
    public List <CollectionElementToken> Multiplications()
    {
        HashSet <QueryToken> allTokens = new HashSet <QueryToken>(this.AllTokens());

        return(CollectionElementToken.GetElements(allTokens));
    }