Ejemplo n.º 1
0
 protected override Expression VisitMethodCall(MethodCallExpression node)
 {
     if (typeof(IModelElement).IsAssignableFrom(node.Type) && node.Arguments.Any(arg => !typeof(IModelElement).IsAssignableFrom(arg.Type)))
     {
         var replaceMemberId = node.ToString();
         ParameterExtraction extraction;
         if (!parameters.TryGetValue(replaceMemberId, out extraction))
         {
             extraction = new ParameterExtraction(Expression.Parameter(node.Type, "model_par_" + parameters.Count.ToString()), node);
             parameters.Add(replaceMemberId, extraction);
         }
         return(extraction.Parameter);
     }
     return(base.VisitMethodCall(node));
 }
Ejemplo n.º 2
0
 protected override Expression VisitMember(MemberExpression node)
 {
     if (typeof(IModelElement).IsAssignableFrom(node.Type) && !typeof(IModelElement).IsAssignableFrom(node.Expression.Type))
     {
         var parameterCollector = new ParameterCollector();
         parameterCollector.Visit(node);
         parameterCollector.Parameters.IntersectWith(lambdaParameters);
         if (parameterCollector.Parameters.Count > 0)
         {
             return(node);
         }
         var replaceMemberId = node.ToString();
         ParameterExtraction extraction;
         if (!parameters.TryGetValue(replaceMemberId, out extraction))
         {
             extraction = new ParameterExtraction(Expression.Parameter(node.Type, "model_par_" + parameters.Count.ToString()), node);
             parameters.Add(replaceMemberId, extraction);
         }
         return(extraction.Parameter);
     }
     return(base.VisitMember(node));
 }