CreateConvertExpression() приватный Метод

private CreateConvertExpression ( PropertyInfo sourceProperty, PropertyInfo targetProperty, System.Linq.Expressions.ParameterExpression sourceParameter, System.Linq.Expressions.ParameterExpression targetParameter ) : Expression
sourceProperty System.Reflection.PropertyInfo
targetProperty System.Reflection.PropertyInfo
sourceParameter System.Linq.Expressions.ParameterExpression
targetParameter System.Linq.Expressions.ParameterExpression
Результат System.Linq.Expressions.Expression
Пример #1
0
        protected Expression GetExpression(
            string targetMemberName,
            ReflectionPropertyMappingInfo <TSource, TTarget> reflectionInfo,
            ParameterExpression sourceParameter,
            ParameterExpression targetParameter)
        {
            Guard.CheckArgumentNotNull(reflectionInfo, "reflectionInfo");

            var converter = new PropertyConverter();

            return(converter.CreateConvertExpression(
                       reflectionInfo.SourcePropertyInfo,
                       reflectionInfo.TargetPropertyInfo,
                       sourceParameter,
                       targetParameter));
        }
Пример #2
0
        public void CreateConvertExpression_MultipleCases_ConvertsCorrectly(
            Type sourceType,
            Type targetType,
            string sourcePropertyName,
            string targetPropertyName,
            object sourcePropertyValue)
        {
            var target = new PropertyConverter();
            var fixture = new Fixture();
            MethodInfo createMethod = fixture.GetType().GetMethod("CreateAnonymous");
            object sourceObject = Activator.CreateInstance(sourceType);
            object targetObject = Activator.CreateInstance(targetType);
            ParameterExpression sourceParam = Expression.Parameter(sourceType);
            ParameterExpression targetParam = Expression.Parameter(targetType);
            PropertyInfo sourceProp = sourceType.GetProperty(sourcePropertyName);
            PropertyInfo targetProp = targetType.GetProperty(targetPropertyName);
            if (sourcePropertyValue != null)
            {
                sourceProp.SetValue(sourceObject, sourcePropertyValue, null);
            }

            var expr = target.CreateConvertExpression(
                sourceProp,
                targetProp,
                sourceParam,
                targetParam);

            var actionType = typeof (MappingAction<,>).MakeGenericType(sourceType, targetType);
            var lambda = Expression.Lambda(actionType, expr, sourceParam, targetParam);
            var action = lambda.Compile();
            action.DynamicInvoke(sourceObject, targetObject);
            var resultProp = targetProp.GetValue(targetObject, null);
            resultProp.ShouldBe(sourcePropertyValue);
        }