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);
        }
예제 #5
0
        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));
        }
예제 #6
0
 /// <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");
 }