Exemple #1
0
        private static bool ProcessCustomResolvers(
            Expression source,
            Expression destination,
            TypeAdapterSettings config,
            MemberInfo destinationMember,
            List <PropertyModel> properties)
        {
            bool isAdded   = false;
            var  resolvers = config.Resolvers;

            if (resolvers != null && resolvers.Count > 0)
            {
                PropertyModel    propertyModel = null;
                LambdaExpression lastCondition = null;
                for (int j = 0; j < resolvers.Count; j++)
                {
                    var resolver = resolvers[j];
                    if (destinationMember.Name.Equals(resolver.MemberName))
                    {
                        if (propertyModel == null)
                        {
                            propertyModel = new PropertyModel
                            {
                                ConvertType = 5,
                                Setter      = destinationMember is PropertyInfo
                                    ? Expression.Property(destination, (PropertyInfo)destinationMember)
                                    : Expression.Field(destination, (FieldInfo)destinationMember),
                                SetterProperty = destinationMember,
                            };
                            isAdded = true;
                        }

                        Expression invoke = resolver.Invoker.Apply(source);
                        propertyModel.Getter = lastCondition != null
                            ? Expression.Condition(lastCondition.Apply(source), propertyModel.Getter, invoke)
                            : invoke;

                        lastCondition = resolver.Condition;
                        if (resolver.Condition == null)
                        {
                            break;
                        }
                    }
                }
                if (propertyModel != null)
                {
                    if (lastCondition != null)
                    {
                        propertyModel.Getter = Expression.Condition(lastCondition.Apply(source), propertyModel.Getter, Expression.Constant(propertyModel.Getter.Type.GetDefault(), propertyModel.Getter.Type));
                    }
                    properties.Add(propertyModel);
                }
            }
            return(isAdded);
        }
Exemple #2
0
 public static Expression Apply(this LambdaExpression lambda, ParameterExpression p1, ParameterExpression?p2 = null)
 {
     if (p2 == null)
     {
         return(lambda.Apply(false, p1));
     }
     else
     {
         return(lambda.Apply(false, p1, p2));
     }
 }
Exemple #3
0
 protected override Expression CreateInstantiationExpression(Expression source, Expression?destination, CompileArgument arg)
 {
     if (destination == null)
     {
         return(_lambda.Apply(arg.MapType, source));
     }
     else
     {
         return(_lambda.Apply(arg.MapType, source, destination));
     }
 }
        private static bool ProcessCustomResolvers(
            Expression source,
            Expression destination,
            TypeAdapterSettings config,
            IMemberModel destinationMember,
            List <MemberConverter> properties)
        {
            bool isAdded   = false;
            var  resolvers = config.Resolvers;

            if (resolvers != null && resolvers.Count > 0)
            {
                MemberConverter  memberConverter = null;
                LambdaExpression lastCondition   = null;
                for (int j = 0; j < resolvers.Count; j++)
                {
                    var resolver = resolvers[j];
                    if (destinationMember.Name.Equals(resolver.MemberName))
                    {
                        if (memberConverter == null)
                        {
                            memberConverter = new MemberConverter
                            {
                                ConvertType = 5,
                                Setter      = destinationMember.GetExpression(destination),
                                SetterInfo  = destinationMember.Info,
                            };
                            isAdded = true;
                        }

                        Expression invoke = resolver.Invoker.Apply(source);
                        memberConverter.Getter = lastCondition != null
                            ? Expression.Condition(lastCondition.Apply(source), memberConverter.Getter, invoke)
                            : invoke;

                        lastCondition = resolver.Condition;
                        if (resolver.Condition == null)
                        {
                            break;
                        }
                    }
                }
                if (memberConverter != null)
                {
                    if (lastCondition != null)
                    {
                        memberConverter.Getter = Expression.Condition(lastCondition.Apply(source), memberConverter.Getter, Expression.Constant(memberConverter.Getter.Type.GetDefault(), memberConverter.Getter.Type));
                    }
                    properties.Add(memberConverter);
                }
            }
            return(isAdded);
        }
        private static Expression CustomResolverForDictionaryFn(Expression source, IMemberModel destinationMember, CompileArgument arg)
        {
            var config    = arg.Settings;
            var resolvers = config.Resolvers;

            if (resolvers == null || resolvers.Count <= 0)
            {
                return(null);
            }
            var dictType = source.Type.GetDictionaryType();

            if (dictType == null)
            {
                return(null);
            }
            var args   = dictType.GetGenericArguments();
            var method = typeof(CoreExtensions).GetMethods().First(m => m.Name == nameof(CoreExtensions.GetValueOrDefault)).MakeGenericMethod(args);

            Expression       getter        = null;
            LambdaExpression lastCondition = null;

            foreach (var resolver in resolvers)
            {
                if (!destinationMember.Name.Equals(resolver.DestinationMemberName))
                {
                    continue;
                }

                Expression invoke = resolver.Invoker == null
                    ? Expression.Call(method, source.To(dictType), Expression.Constant(resolver.SourceMemberName))
                    : resolver.Invoker.Apply(source);

                getter = lastCondition != null
                    ? Expression.Condition(lastCondition.Apply(source), getter, invoke)
                    : invoke;

                lastCondition = resolver.Condition;
                if (resolver.Condition == null)
                {
                    break;
                }
            }
            if (lastCondition != null)
            {
                getter = Expression.Condition(lastCondition.Apply(source), getter, getter.Type.CreateDefault());
            }
            return(getter);
        }
        private static Expression CustomResolverFn(Expression source, IMemberModel destinationMember, CompileArgument arg)
        {
            var config    = arg.Settings;
            var resolvers = config.Resolvers;

            if (resolvers == null || resolvers.Count <= 0)
            {
                return(null);
            }

            Expression       getter        = null;
            LambdaExpression lastCondition = null;

            for (int j = 0; j < resolvers.Count; j++)
            {
                var resolver = resolvers[j];
                if (destinationMember.Name.Equals(resolver.MemberName))
                {
                    Expression invoke = resolver.Invoker.Apply(source);
                    getter = lastCondition != null
                        ? Expression.Condition(lastCondition.Apply(source), getter, invoke)
                        : invoke;

                    lastCondition = resolver.Condition;
                    if (resolver.Condition == null)
                    {
                        break;
                    }
                }
            }
            if (lastCondition != null)
            {
                getter = Expression.Condition(lastCondition.Apply(source), getter, Expression.Constant(getter.Type.GetDefault(), getter.Type));
            }
            return(getter);
        }
Exemple #7
0
        internal void MergeIgnoreMembers(string name, LambdaExpression condition)
        {
            LambdaExpression lambda;

            if (this.IgnoreMembers.TryGetValue(name, out lambda))
            {
                if (lambda == null)
                {
                    return;
                }

                var param = lambda.Parameters.ToArray();
                lambda = Expression.Lambda(Expression.OrElse(lambda.Body, condition.Apply(param[0], param[1])), param);
                this.IgnoreMembers[name] = lambda;
            }
            else
            {
                this.IgnoreMembers[name] = condition;
            }
        }
Exemple #8
0
 public static Expression Apply(this LambdaExpression lambda, MapType mapType, params Expression[] exps)
 {
     return(lambda.Apply(mapType != MapType.Projection, exps));
 }
 protected override Expression CreateInstantiationExpression(Expression source, Expression destination, CompileArgument arg)
 {
     return(_lambda.Apply(source, destination));
 }
 public static Expression ApplyExpression(this LambdaExpression lambda, params Expression[] arguments)
 {
     return(lambda.Apply(arguments.AsEnumerable()));
 }
 public static Expression Apply(this LambdaExpression lambda, params ParameterExpression[] exps)
 {
     return(lambda.Apply(false, exps.Cast <Expression>().ToArray()));
 }