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))); }
public void UpdateMultiplyMessage() { string message = CollectionElementToken.MultipliedMessage(Request.Multiplications, EntityType); tbMultiplications.Text = message; brMultiplications.Visibility = message.HasText() ? Visibility.Visible : Visibility.Collapsed; }
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); }
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 }); }
public List <CollectionElementToken> Multiplications() { HashSet <QueryToken> allTokens = new HashSet <QueryToken>(this.AllTokens()); return(CollectionElementToken.GetElements(allTokens)); }