Exemplo n.º 1
0
 public Func<EntitySession, FullSetEntityCache, object[], object> Rewrite(LambdaExpression lambda)
 {
     _lambda = lambda;
       _sessionParam = Expression.Parameter(typeof(EntitySession), "@session");
       _cacheParam = Expression.Parameter(typeof(FullSetEntityCache), "@entitycache");
       _argsParam = Expression.Parameter(typeof(object[]), "@args");
       var newParams = new ParameterExpression[] { _sessionParam, _cacheParam, _argsParam };
       // Rewrite
       var newBody = Visit(lambda.Body);
       // we need a separate visiting loop to inject Cloning method
       var injector = new CloneCallInjector();
       var finalBody = injector.InjectCloneMethod(_model, newBody, _sessionParam);
       var finalBodyToObj = Expression.Convert(finalBody, typeof(object));
       //Wrap into lambda
       var newLambda = Expression.Lambda(finalBodyToObj, newParams);
       var compiled = newLambda.Compile();
       var result = (Func<EntitySession, FullSetEntityCache, object[], object>)compiled;
       return result;
 }
Exemplo n.º 2
0
        public Func <EntitySession, FullSetEntityCache, object[], object> Rewrite(LambdaExpression lambda)
        {
            _lambda       = lambda;
            _sessionParam = Expression.Parameter(typeof(EntitySession), "@session");
            _cacheParam   = Expression.Parameter(typeof(FullSetEntityCache), "@entitycache");
            _argsParam    = Expression.Parameter(typeof(object[]), "@args");
            var newParams = new ParameterExpression[] { _sessionParam, _cacheParam, _argsParam };
            // Rewrite
            var newBody = Visit(lambda.Body);
            // we need a separate visiting loop to inject Cloning method
            var injector       = new CloneCallInjector();
            var finalBody      = injector.InjectCloneMethod(_model, newBody, _sessionParam);
            var finalBodyToObj = Expression.Convert(finalBody, typeof(object));
            //Wrap into lambda
            var newLambda = Expression.Lambda(finalBodyToObj, newParams);
            var compiled  = newLambda.Compile();
            var result    = (Func <EntitySession, FullSetEntityCache, object[], object>)compiled;

            return(result);
        }