public void Visit_ExpressionSubClassCheckIfNull_DefaultValueConstant_ReturnExpression() { MapperExpressionVisitor expected = new MapperExpressionVisitor(Expression.Parameter(typeof(ClassSource), "s")); Expression<Func<ClassSource, object>> exp = x => x.SubClass.PropInt1; Expression actual = null; actual = expected.Visit(exp, true); Assert.IsTrue(actual.NodeType == ExpressionType.MemberAccess); }
public void Visit_ExpressionMemberSimple_ReturnExpression() { MapperExpressionVisitor expected = new MapperExpressionVisitor(Expression.Parameter(typeof(ClassSource), "s")); Expression<Func<ClassSource, object>> exp = x => x.PropString1; Expression actual = null; actual = expected.Visit(exp.Body, true); Assert.IsNotNull(actual); }
public void Visit_ExpressionIsNull_ReturnNull() { MapperExpressionVisitor expected = new MapperExpressionVisitor(Expression.Parameter(typeof(ClassSource), "s")); Expression exp = null; Expression actual = null; actual = expected.Visit(exp); Assert.IsNull(actual); }
public void Visit_ParameterExpression_CheckIfNull_IsTrue_Expression() { MapperExpressionVisitor expected = new MapperExpressionVisitor(Expression.Parameter(typeof(ClassSource), "s")); ParameterExpression exp = Expression.Parameter(typeof(ClassSource2), "x"); Expression actual = null; actual = expected.Visit(exp,true) as ParameterExpression; Assert.IsTrue(actual.NodeType == ExpressionType.Parameter); Assert.AreNotEqual(actual.Type, exp.Type); }
internal LambdaExpression GetSortedExpression(string propertySource) { Contract.Requires(!string.IsNullOrEmpty(propertySource)); Expression result = null; var exp = PropertiesMapping.Find(x => GetPropertyInfo(x.Item2).Name == propertySource); if (exp == null) { throw new PropertyNoExistException(propertySource, TargetType); } // To change the parameter. var visitor = new MapperExpressionVisitor(paramClassSource); result = visitor.Visit(exp.Item1); return(Expression.Lambda(result, paramClassSource)); }
/// <summary> /// Initializes a new instance of the <see cref="MapperConfigurationBase" /> class. /// </summary> /// <param name="source">The source.</param> /// <param name="destination">The destination.</param> /// <param name="paramName">Name of the parameter.</param> /// <param name="name">The name.</param> protected MapperConfigurationBase(Type source, Type destination, string paramName, string name = null) { TargetType = destination; SourceType = source; paramClassSource = Expression.Parameter(source, paramName); Name = string.IsNullOrEmpty(name) ? paramName : name; propertiesToIgnore = new List <PropertyInfo>(); propertiesMapping = new List <Tuple <Expression, Expression, bool, string> >(); visitorMapper = new MapperExpressionVisitor(paramClassSource); memberForNew = new List <MemberAssignment>(); selectMethod = typeof(Enumerable).GetMethods() .Where(m => m.Name == "Select") .Select(x => x.GetParameters().First(p => p.Name.Equals("selector") && p.ParameterType.GetGenericArguments().Count() == 2)) .First().Member as MethodInfo; toListMethod = typeof(Enumerable).GetMethod("ToList"); }