/// <summary> /// 创建成员绑定。 /// </summary> /// <param name="propertyExpression">属性表达式</param> /// <param name="propertyTarget">目标属性</param> /// <param name="checkIfNull">是否检查null值</param> protected void CreateMemberBinding(Expression propertyExpression, MemberInfo propertyTarget, bool checkIfNull) { // 访问表达式进行转换 Expression result = visitorMapper.Visit(propertyExpression, checkIfNull); MemberAssignment bind = Expression.Bind(propertyTarget, result); memberForNew.Add(bind); }
public void Visit_ExpressionSubClassCheckIfNull_DefaultValueConstant_ReturnExpression() { MapperExpressionVisitor expected = new MapperExpressionVisitor(Expression.Parameter(typeof(ClassSource), "s")); Expression <Func <ClassSource, object> > exp = x => x.SubClass.PropInt1; var 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; var actual = expected.Visit(exp.Body, true); Assert.IsNotNull(actual); }
public void Visit_ExpressionLambdaConstantSimple_ReturnExpression() { MapperExpressionVisitor expected = new MapperExpressionVisitor(Expression.Parameter(typeof(ClassSource), "s")); Expression <Func <ClassSource, object> > exp = x => x.PropInt1; var actual = expected.Visit(exp, true); Assert.IsNotNull(actual); }
public void Visit_ExpressionIsNull_ReturnNull() { MapperExpressionVisitor expected = new MapperExpressionVisitor(Expression.Parameter(typeof(ClassSource), "s")); Expression exp = null; var 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 = expected.Visit(exp, true) as ParameterExpression; Assert.IsTrue(actual.NodeType == ExpressionType.Parameter); Assert.AreNotEqual(actual.Type, exp.Type); }
/// <summary> /// 获取排序表达式树 /// </summary> /// <param name="propertySource">属性名</param> /// <returns></returns> public LambdaExpression GetSortedExpression(string propertySource) { var exp = PropertiesMapping.Find(x => GetPropertyInfo(x.Item2).Name == propertySource); if (exp == null) { throw new PropertyNoExistException(propertySource, TargetType); } // 更改参数 var visitor = new MapperExpressionVisitor(paramClassSource); var result = visitor.Visit(exp.Item1); return Expression.Lambda(result, paramClassSource); }
/// <summary> /// 创建成员绑定。 /// </summary> /// <param name="propertyExpression">属性表达式</param> /// <param name="propertyTarget">目标属性</param> /// <param name="checkIfNull">是否检查null值</param> protected void CreateMemberBinding(Expression propertyExpression, MemberInfo propertyTarget, bool checkIfNull) { // 访问表达式进行转换 memberForNew.Add(Expression.Bind(propertyTarget, visitorMapper.Visit(propertyExpression, checkIfNull))); }