public DataSourceLoaderImpl(IQueryable <S> source, DataSourceLoadOptionsBase options, CancellationToken cancellationToken, bool sync) { var providerInfo = new QueryProviderInfo(source.Provider); var guardNulls = providerInfo.IsLinqToObjects; if (!sync) { AsyncHelper = new AsyncHelper(source.Provider, providerInfo, cancellationToken); } #if DEBUG ExpressionWatcher = options.ExpressionWatcher; UseEnumerableOnce = options.UseEnumerableOnce; guardNulls = guardNulls && !options.SuppressGuardNulls; #endif Source = source; Context = new DataSourceLoadContext(options, providerInfo, typeof(S)); Builder = new DataSourceExpressionBuilder <S>( Context, guardNulls, new AnonTypeNewTweaks { AllowEmpty = !providerInfo.IsL2S, AllowUnusedMembers = !providerInfo.IsL2S } ); }
static bool ShouldUseRemoteGrouping(QueryProviderInfo provider, DataSourceLoadOptionsBase options) { if (provider.IsLinqToObjects) { return(false); } if (provider.IsEFCore) { // https://github.com/aspnet/EntityFrameworkCore/issues/2341 // https://github.com/aspnet/EntityFrameworkCore/issues/11993 // https://github.com/aspnet/EntityFrameworkCore/issues/11999 if (provider.Version < new Version(2, 2, 0)) { return(false); } bool HasAvg(SummaryInfo[] summary) { return(summary != null && summary.Any(i => i.SummaryType == "avg")); } #warning Remove with https://github.com/aspnet/EntityFrameworkCore/issues/11711 fix if (HasAvg(options.TotalSummary) || HasAvg(options.GroupSummary)) { return(false); } } return(true); }
public ExpressionExecutor(IQueryProvider provider, Expression expr, QueryProviderInfo providerInfo, CancellationToken cancellationToken, bool sync) { Provider = provider; Expr = expr; ProviderInfo = providerInfo; CancellationToken = cancellationToken; Sync = sync; }
public DataSourceLoaderImpl(IQueryable <S> source, DataSourceLoadOptionsBase options) { QueryProviderInfo = new QueryProviderInfo(source.Provider); Builder = new DataSourceExpressionBuilder <S>(options, QueryProviderInfo.IsLinqToObjects); ShouldEmptyGroups = options.HasGroups && !options.Group.Last().GetIsExpanded(); CanUseRemoteGrouping = options.RemoteGrouping ?? ShouldUseRemoteGrouping(QueryProviderInfo, options); SummaryIsTotalCountOnly = !options.HasGroupSummary && options.HasSummary && options.TotalSummary.All(i => i.SummaryType == AggregateName.COUNT); Source = source; Options = options; }
public DataSourceLoaderImpl(IQueryable source, DataSourceLoadOptionsBase options, CancellationToken cancellationToken, bool sync) { var providerInfo = new QueryProviderInfo(source.Provider); Source = source; Context = new DataSourceLoadContext(options, providerInfo, Source.ElementType); CreateExecutor = expr => new ExpressionExecutor(Source.Provider, expr, providerInfo, cancellationToken, sync, options.AllowAsyncOverSync); #if DEBUG ExpressionWatcher = options.ExpressionWatcher; UseEnumerableOnce = options.UseEnumerableOnce; #endif }
public DataSourceLoaderImpl(IQueryable <S> source, DataSourceLoadOptionsBase options) { QueryProviderInfo = new QueryProviderInfo(source.Provider); Builder = new DataSourceExpressionBuilder <S>( options, QueryProviderInfo.IsLinqToObjects, options.StringToLower.GetValueOrDefault(QueryProviderInfo.IsLinqToObjects), new AnonTypeNewTweaks { AllowEmpty = !QueryProviderInfo.IsL2S, AllowUnusedMembers = !QueryProviderInfo.IsL2S } ); ShouldEmptyGroups = options.HasGroups && !options.Group.Last().GetIsExpanded(); CanUseRemoteGrouping = options.RemoteGrouping ?? ShouldUseRemoteGrouping(QueryProviderInfo, options); SummaryIsTotalCountOnly = !options.HasGroupSummary && options.HasSummary && options.TotalSummary.All(i => i.SummaryType == AggregateName.COUNT); Source = source; Options = options; }
public DataSourceLoaderImpl(IQueryable <S> source, DataSourceLoadOptionsBase options) { #if DEBUG ExpressionWatcher = options.ExpressionWatcher; UseEnumerableOnce = options.UseEnumerableOnce; #endif var providerInfo = new QueryProviderInfo(source.Provider); Source = source; Context = new DataSourceLoadContext(options, providerInfo, typeof(S)); Builder = new DataSourceExpressionBuilder <S>( Context, providerInfo.IsLinqToObjects, new AnonTypeNewTweaks { AllowEmpty = !providerInfo.IsL2S, AllowUnusedMembers = !providerInfo.IsL2S } ); }
public DataSourceLoadContext(DataSourceLoadOptionsBase options, QueryProviderInfo providerInfo, Type itemType) { _options = options; _providerInfo = providerInfo; _itemType = itemType; }