private Expression Prepare(Expression cachedExpression, ParameterBag parameters) { Expression result; if (parameters.Any()) { var visitor = new ConstantExpressionReplacementVisitor(parameters); result = visitor.Visit(cachedExpression); } else { result = cachedExpression; } // perform null-propagation if this feature is enabled. if (_configurationProvider.EnableNullPropagationForQueryMapping) { var nullVisitor = new NullsafeQueryRewriter(); return(nullVisitor.Visit(result)); } return(result); }
public Expression CreateMapExpression(Type sourceType, Type destinationType, IDictionary <string, object> parameters = null, params MemberInfo[] membersToExpand) { parameters = parameters ?? new Dictionary <string, object>(); var cachedExpression = _expressionCache.GetOrAdd(new ExpressionRequest(sourceType, destinationType, membersToExpand, null)); Expression x = cachedExpression; if (parameters.Any()) { var visitor = new ConstantExpressionReplacementVisitor(parameters); x = visitor.Visit(cachedExpression); } // perform null-propagation if this feature is enabled. if (_configurationProvider.EnableNullPropagationForQueryMapping) { var nullVisitor = new NullsafeQueryRewriter(); return(nullVisitor.Visit(x)); } return(x); }
/// <summary> /// Create an expression tree representing a mapping from the source type to destination type /// Includes flattening and expressions inside MapFrom member configuration /// </summary> /// <param name="mappingEngine">Mapping engine instance</param> /// <param name="sourceType">Source Type</param> /// <param name="destinationType">Destination Type</param> /// <param name="parameters">Optional parameter object for parameterized mapping expressions</param> /// <param name="membersToExpand">Expand members explicitly previously marked as members to explicitly expand</param> /// <returns>Expression tree mapping source to destination type</returns> public static Expression CreateMapExpression(this IMappingEngine mappingEngine, Type sourceType, Type destinationType, System.Collections.Generic.IDictionary <string, object> parameters = null, params string[] membersToExpand) { //Expression.const parameters = parameters ?? new Dictionary <string, object>(); var cachedExpression = _expressionCache.GetOrAdd(new ExpressionRequest(sourceType, destinationType, membersToExpand), tp => CreateMapExpression(mappingEngine, tp, DictionaryFactory.CreateDictionary <ExpressionRequest, int>())); if (!parameters.Any()) { return(cachedExpression); } var visitor = new ConstantExpressionReplacementVisitor(parameters); return(visitor.Visit(cachedExpression)); }