public static LambdaExpression MakeLambda(Expression expression, TranslatorContext context) { var tupleParameter = Expression.Parameter(typeof(Tuple), "tuple"); var visitor = new ExpressionMaterializer(tupleParameter, context, null, EnumerableUtils <Parameter <Tuple> > .Empty); var processedExpression = OwnerRemover.RemoveOwner(expression); return(FastExpression.Lambda(visitor.Visit(processedExpression), tupleParameter)); }
public static MaterializationInfo MakeMaterialization(ItemProjectorExpression projector, TranslatorContext context, IEnumerable <Parameter <Tuple> > tupleParameters) { var tupleParameter = Expression.Parameter(typeof(Tuple), "tuple"); var materializationContextParameter = Expression.Parameter(typeof(ItemMaterializationContext), "mc"); var visitor = new ExpressionMaterializer(tupleParameter, context, materializationContextParameter, tupleParameters); var lambda = FastExpression.Lambda(visitor.Visit(projector.Item), tupleParameter, materializationContextParameter); var count = visitor.entityRegistry.Count; return(new MaterializationInfo(count, lambda)); }