Example #1
0
        protected override Expression VisitGroupingExpression(GroupingExpression groupingExpression)
        {
            // 1. Prepare subquery parameters.
            Parameter <Tuple> parameterOfTuple;
            Type elementType;
            ProjectionExpression projection;
            var translatedQuery = PrepareSubqueryParameters(groupingExpression, out parameterOfTuple, out elementType, out projection);

            // 2. Create constructor
            var keyType         = groupingExpression.KeyExpression.Type;
            var keyMaterializer = Visit(groupingExpression.KeyExpression);
            var groupingCtor    = typeof(Grouping <,>)
                                  .MakeGenericType(keyType, elementType)
                                  .GetConstructor(new[] { typeof(ProjectionExpression), typeof(TranslatedQuery), typeof(Parameter <Tuple>), typeof(Tuple), keyType, typeof(ItemMaterializationContext) });

            // 3. Create result expression.
            var resultExpression = Expression.New(
                groupingCtor,
                Expression.Constant(projection),
                Expression.Constant(translatedQuery),
                Expression.Constant(parameterOfTuple),
                tupleParameter,
                keyMaterializer,
                itemMaterializationContextParameter);

            // 4. Result must be IGrouping<,> instead of Grouping<,>. Convert result expression.
            return(Expression.Convert(resultExpression, groupingExpression.Type));
        }
Example #2
0
 public object VisitGroupingExpression(GroupingExpression expr, object context)
 {
     StringBuilder.Append("(");
     expr.Contents.AcceptVisitor(this, context);
     StringBuilder.Append(")");
     return(null);
 }
Example #3
0
        protected override Expression VisitGroupingExpression(GroupingExpression expression)
        {
            var keyExpression = Visit(expression.KeyExpression);

            if (keyExpression != expression.KeyExpression)
            {
                return(new GroupingExpression(
                           expression.Type,
                           expression.OuterParameter,
                           expression.DefaultIfEmpty,
                           expression.ProjectionExpression,
                           expression.ApplyParameter,
                           keyExpression,
                           expression.SelectManyInfo));
            }
            return(expression);
        }
        protected override Expression VisitGroupingExpression(GroupingExpression expression)
        {
            var newProvider          = Rewrite(expression.ProjectionExpression.ItemProjector.DataSource, oldApplyParameter, newApplyParameter);
            var newItemProjectorBody = Visit(expression.ProjectionExpression.ItemProjector.Item);
            var newKeyExpression     = Visit(expression.KeyExpression);

            if (newProvider != expression.ProjectionExpression.ItemProjector.DataSource ||
                newItemProjectorBody != expression.ProjectionExpression.ItemProjector.Item ||
                newKeyExpression != expression.KeyExpression)
            {
                var newItemProjector        = new ItemProjectorExpression(newItemProjectorBody, newProvider, expression.ProjectionExpression.ItemProjector.Context);
                var newProjectionExpression = new ProjectionExpression(
                    expression.ProjectionExpression.Type,
                    newItemProjector,
                    expression.ProjectionExpression.TupleParameterBindings,
                    expression.ProjectionExpression.ResultType);
                return(new GroupingExpression(
                           expression.Type, expression.OuterParameter, expression.DefaultIfEmpty, newProjectionExpression,
                           expression.ApplyParameter, expression.KeyExpression, expression.SelectManyInfo));
            }
            return(expression);
        }
 protected override Expression VisitGroupingExpression(GroupingExpression expression)
 {
     Visit(expression.KeyExpression);
     VisitSubQueryExpression(expression);
     return(expression);
 }
 protected override Expression VisitGroupingExpression(GroupingExpression expression)
 {
     return(expression);
 }
Example #7
0
        public object VisitGroupingExpression(GroupingExpression expression)
        {
            Resolve(expression.Expression);

            return(null);
        }
Example #8
0
 public object VisitGroupingExpression(GroupingExpression expression)
 {
     return(Evaluate(expression.Expression));
 }
Example #9
0
 protected virtual Expression VisitGroupingExpression(GroupingExpression expression)
 {
     return(expression);
 }
Example #10
0
 public Unit VisitGroupingExpression(GroupingExpression expression)
 {
     Resolve(expression.Expression);
     return(Unit.Value);
 }
Example #11
0
 public string VisitGroupingExpression(GroupingExpression expression)
 {
     return(Parenthesize("group", expression.expression));
 }