Esempio n. 1
0
        public static IDataSourceSet For(
            IList <IDataSource> dataSources,
            IDataSourceSetInfo info,
            Func <IList <IDataSource>, IMemberMapperData, Expression> valueBuilder)
        {
            switch (dataSources.Count)
            {
            case 0:
                return(EmptyDataSourceSet.Instance);

            case 1:
                return(For(dataSources.First(), info, (ds, md) => valueBuilder.Invoke(new[] { ds }, md)));

            default:
                var mapperData = info.MapperData;

                if (TryAdjustToSingleUseableDataSource(ref dataSources, mapperData))
                {
                    goto case 1;
                }

                if (mapperData.MapperContext.UserConfigurations.HasSourceValueFilters)
                {
                    dataSources = dataSources.WithFilters(mapperData);
                }

                return(new MultipleValueDataSourceSet(dataSources, mapperData, valueBuilder));
            }
        }
Esempio n. 2
0
        private static IDataSourceSet For(
            IDataSource dataSource,
            IDataSourceSetInfo info,
            Func <IDataSource, IMemberMapperData, Expression> valueBuilder)
        {
            if (!dataSource.IsValid)
            {
                return(info.MappingContext.IgnoreUnsuccessfulMemberPopulations
                    ? EmptyDataSourceSet.Instance
                    : new NullDataSourceSet(dataSource));
            }

            var mapperData = info.MapperData;

            if (mapperData.MapperContext.UserConfigurations.HasSourceValueFilters)
            {
                dataSource = dataSource.WithFilter(mapperData);
            }

            return(new SingleValueDataSourceSet(dataSource, mapperData, valueBuilder));
        }
Esempio n. 3
0
 public static IDataSourceSet For(IDataSource dataSource, IDataSourceSetInfo info)
 => For(dataSource, info, ValueExpressionBuilders.SingleDataSource);