internal static ProjectionPlan CompilePlan(LambdaExpression projection, Dictionary <Expression, Expression> normalizerRewrites) { Debug.Assert(projection != null, "projection != null"); Debug.Assert(projection.Parameters.Count == 1, "projection.Parameters.Count == 1"); Debug.Assert( projection.Body.NodeType == ExpressionType.Constant || projection.Body.NodeType == ExpressionType.MemberInit || projection.Body.NodeType == ExpressionType.MemberAccess || projection.Body.NodeType == ExpressionType.Convert || projection.Body.NodeType == ExpressionType.ConvertChecked || projection.Body.NodeType == ExpressionType.New, "projection.Body.NodeType == Constant, MemberInit, MemberAccess, Convert(Checked) New"); ProjectionPlanCompiler rewriter = new ProjectionPlanCompiler(normalizerRewrites); #if TRACE_CLIENT_PROJECTIONS Trace.WriteLine("Projection: " + projection); #endif Expression plan = rewriter.Visit(projection); #if TRACE_CLIENT_PROJECTIONS Trace.WriteLine("Becomes: " + plan); #endif ProjectionPlan result = new ProjectionPlan(); result.Plan = (Func <object, object, Type, object>)((LambdaExpression)plan).Compile(); result.ProjectedType = projection.Body.Type; #if DEBUG result.SourceProjection = projection; result.TargetProjection = plan; #endif return(result); }
internal static ProjectionPlan CompilePlan(LambdaExpression projection, Dictionary<Expression, Expression> normalizerRewrites) { Debug.Assert(projection != null, "projection != null"); Debug.Assert(projection.Parameters.Count == 1, "projection.Parameters.Count == 1"); Debug.Assert( projection.Body.NodeType == ExpressionType.Constant || projection.Body.NodeType == ExpressionType.MemberInit || projection.Body.NodeType == ExpressionType.MemberAccess || projection.Body.NodeType == ExpressionType.Convert || projection.Body.NodeType == ExpressionType.ConvertChecked || projection.Body.NodeType == ExpressionType.New, "projection.Body.NodeType == Constant, MemberInit, MemberAccess, Convert(Checked) New"); ProjectionPlanCompiler rewriter = new ProjectionPlanCompiler(normalizerRewrites); #if TRACE_CLIENT_PROJECTIONS Trace.WriteLine("Projection: " + projection); #endif Expression plan = rewriter.Visit(projection); #if TRACE_CLIENT_PROJECTIONS Trace.WriteLine("Becomes: " + plan); #endif ProjectionPlan result = new ProjectionPlan(); result.Plan = (Func<object, object, Type, object>)((LambdaExpression)plan).Compile(); result.ProjectedType = projection.Body.Type; #if DEBUG result.SourceProjection = projection; result.TargetProjection = plan; #endif return result; }
internal static ProjectionPlan CompilePlan(LambdaExpression projection, Dictionary <Expression, Expression> normalizerRewrites) { Expression expression = new ProjectionPlanCompiler(normalizerRewrites).Visit(projection); return(new ProjectionPlan { Plan = (Func <object, object, Type, object>)((LambdaExpression)expression).Compile(), ProjectedType = projection.Body.Type }); }
internal static ProjectionPlan CompilePlan(LambdaExpression projection, Dictionary<Expression, Expression> normalizerRewrites) { Expression expression = new ProjectionPlanCompiler(normalizerRewrites).Visit(projection); return new ProjectionPlan { Plan = (Func<object, object, Type, object>) ((LambdaExpression) expression).Compile(), ProjectedType = projection.Body.Type }; }