Moo.Core.PropertyConverter.CreateConvertExpression C# (CSharp) Method

CreateConvertExpression() private method

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
return System.Linq.Expressions.Expression
        public virtual Expression CreateConvertExpression(
            PropertyInfo sourceProperty,
            PropertyInfo targetProperty,
            ParameterExpression sourceParameter,
            ParameterExpression targetParameter)
        {
            Guard.CheckArgumentNotNull(sourceProperty, "sourceProperty");
            Guard.CheckArgumentNotNull(targetParameter, "targetParameter");
            Guard.CheckArgumentNotNull(sourceParameter, "sourceParameter");
            Guard.CheckArgumentNotNull(targetParameter, "targetParameter");

            PropertyInfo innerProp;
            bool checkProp = false;
            MemberExpression targetGet = Expression.Property(targetParameter, targetProperty);
            MemberExpression sourceGet = Expression.Property(sourceParameter, sourceProperty);
            MemberExpression originalSourceGet = sourceGet;
            if (!CanConvert(sourceProperty, targetProperty, out innerProp))
            {
                return null;
            }

            if (innerProp != null)
            {
                sourceGet = Expression.Property(sourceGet, innerProp);
                checkProp = true;
            }

            Expression valueGet = sourceGet;
            Expression assignment = Expression.Assign(targetGet, valueGet);

            if (checkProp)
            {
                BinaryExpression nullComparison = Expression.NotEqual(originalSourceGet, Expression.Constant(null));
                assignment = Expression.IfThen(nullComparison, assignment);
            }

            // TODO: add try catch blocks here, to provide the correct property names upon errors.
            return assignment;
        }

Usage Example

Exemplo n.º 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));
        }
All Usage Examples Of Moo.Core.PropertyConverter::CreateConvertExpression