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)); } }
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)); }
public static IDataSourceSet For(IDataSource dataSource, IDataSourceSetInfo info) => For(dataSource, info, ValueExpressionBuilders.SingleDataSource);