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); }
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)); } }
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); }
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; } }
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())); }