Example #1
0
 public SourceMemberMetaMemberPart(
     IQualifiedMember sourceMember,
     IMemberMapperData parentMapperData,
     bool isRootMemberPart)
     : base(parentMapperData)
 {
     _isRootMemberPart = isRootMemberPart;
     SourceMember      = sourceMember.RelativeTo(parentMapperData.SourceMember);
 }
Example #2
0
 public IQualifiedMember RelativeTo(IQualifiedMember otherMember)
 {
     return(new DictionarySourceMember(
                Type,
                _wrappedSourceMember.RelativeTo(otherMember),
                _matchedTargetMember,
                IsEntireDictionaryMatch,
                KeyType,
                ValueType));
 }
        public static Expression GetRelativeQualifiedAccess(
            this IQualifiedMember member,
            IMemberMapperData mapperData,
            out IQualifiedMember relativeMember)
        {
            relativeMember = member.RelativeTo(mapperData.SourceMember);
            var qualifiedAccess = relativeMember.GetQualifiedAccess(mapperData);

            return(qualifiedAccess);
        }
Example #4
0
        public static SourceMemberDataSource For(IQualifiedMember sourceMember, IMemberMapperData mapperData)
        {
            sourceMember = sourceMember.RelativeTo(mapperData.SourceMember);

            var sourceMemberValue = sourceMember
                                    .GetQualifiedAccess(mapperData)
                                    .GetConversionTo(sourceMember.Type);

            var sourceMemberDataSource = new SourceMemberDataSource(sourceMember, sourceMemberValue, mapperData);

            return(sourceMemberDataSource);
        }
        private static IDataSource GetSourceMemberDataSourceOrNull(
            IQualifiedMember bestMatchingSourceMember,
            IChildMemberMappingData mappingData)
        {
            if (bestMatchingSourceMember == null)
            {
                return(null);
            }

            bestMatchingSourceMember = bestMatchingSourceMember.RelativeTo(mappingData.MapperData.SourceMember);
            var sourceMemberDataSource = new SourceMemberDataSource(bestMatchingSourceMember, mappingData.MapperData);

            return(GetFinalDataSource(sourceMemberDataSource, 0, mappingData));
        }
        private static IDataSource ApplyFilter(
            IQualifiedMember sourceMember,
            IDataSource dataSource,
            IMemberMapperData mapperData)
        {
            if (DoNotApplyFilter(sourceMember, dataSource, mapperData))
            {
                return(dataSource);
            }

            var filters = mapperData.GetSourceValueFilters(sourceMember.Type);

            if (filters.None())
            {
                return(dataSource);
            }

            var contextMapperData = mapperData.IsEntryPoint || (sourceMember != mapperData.SourceMember)
                ? mapperData
                : mapperData.Parent;

            var rawSourceValue = sourceMember
                                 .RelativeTo(contextMapperData.SourceMember)
                                 .GetQualifiedAccess(contextMapperData.SourceObject);

            var filterConditions = filters.GetFilterConditionsOrNull(rawSourceValue, contextMapperData);

            if (filterConditions == null)
            {
                return(dataSource);
            }

            if (dataSource.IsConditional)
            {
                filterConditions = Expression.AndAlso(dataSource.Condition, filterConditions);
            }

            return(new AdHocDataSource(sourceMember, dataSource.Value, filterConditions));
        }