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);
        }
Ejemplo n.º 3
0
        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
        }
Ejemplo n.º 6
0
        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;
 }