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)); }
public object VisitGroupingExpression(GroupingExpression expr, object context) { StringBuilder.Append("("); expr.Contents.AcceptVisitor(this, context); StringBuilder.Append(")"); return(null); }
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); }
public object VisitGroupingExpression(GroupingExpression expression) { Resolve(expression.Expression); return(null); }
public object VisitGroupingExpression(GroupingExpression expression) { return(Evaluate(expression.Expression)); }
protected virtual Expression VisitGroupingExpression(GroupingExpression expression) { return(expression); }
public Unit VisitGroupingExpression(GroupingExpression expression) { Resolve(expression.Expression); return(Unit.Value); }
public string VisitGroupingExpression(GroupingExpression expression) { return(Parenthesize("group", expression.expression)); }