public LambdaExpression Build(TypeMap typeMap, IMappingConfiguration configuration) { const string name = "src"; ParameterExpression source = Expression.Parameter(typeMap.SourceType, name); MemberAssignment[] bindings = typeMap.PropertyMaps .Select(m => m.BuildBind(source, configuration)) .ToArray(); return Expression.Lambda( Expression.Condition(Expression.Equal(source, Expression.Constant(null)), Expression.Default(typeMap.DestinationType), Expression.MemberInit(Expression.New(typeMap.DestinationType), bindings)), source); }
public LambdaExpression Build(TypeMap typeMap, IMappingConfiguration configuration) { const string name = "src"; ParameterExpression source = Expression.Parameter(typeMap.SourceType, name); ParameterExpression destination = Expression.Parameter(typeMap.DestinationType, "dst"); Expression[] bindings = typeMap.PropertyMaps .Select(m => m.BuildAssign(destination, source, configuration)) .Concat(new[] {destination}) .ToArray(); return Expression.Lambda( Expression.Block(bindings), source, destination); }
public LambdaExpression Build(TypeMap typeMap, IMappingConfiguration configuration) { var tuple = Tuple.Create(typeMap.SourceType, typeMap.DestinationType); return concurrentDictionary.GetOrAdd(tuple, k => inner.Build(typeMap, configuration)); }