Exemple #1
0
        private static IAsyncEnumerable <T> _Include <T>(
            RelationalQueryContext queryContext,
            IAsyncEnumerable <T> innerResults,
            IQuerySource querySource,
            IReadOnlyList <INavigation> navigationPath,
            IReadOnlyList <Func <IAsyncIncludeRelatedValuesStrategy> > includeRelatedValuesStrategyFactories)
            where T : QuerySourceScope
        {
            queryContext.BeginIncludeScope();

            var includeRelatedValuesStrategies
                = includeRelatedValuesStrategyFactories
                  .Select(f => f())
                  .ToList();

            var relatedValueReaders
                = includeRelatedValuesStrategies
                  .Select <
                      IAsyncIncludeRelatedValuesStrategy,
                      Func <EntityKey, Func <IValueReader, EntityKey>, IAsyncEnumerable <IValueReader> > >(
                      s => s.GetRelatedValues)
                  .ToArray();

            return
                (innerResults.Select(
                     async qss =>
            {
                await queryContext.QueryBuffer
                .IncludeAsync(
                    qss.GetResult(querySource),
                    navigationPath,
                    relatedValueReaders,
                    queryContext.CancellationToken);

                return qss;
            })
                 .Finally(() =>
            {
                foreach (var includeRelatedValuesStrategy in includeRelatedValuesStrategies)
                {
                    includeRelatedValuesStrategy.Dispose();
                }

                queryContext.EndIncludeScope();
            }));
        }
        private static IEnumerable <T> _Include <T>(
            RelationalQueryContext queryContext,
            IEnumerable <T> innerResults,
            IQuerySource querySource,
            IReadOnlyList <INavigation> navigationPath,
            IReadOnlyList <Func <IIncludeRelatedValuesStrategy> > includeRelatedValuesStrategyFactories,
            bool querySourceRequiresTracking)
            where T : QuerySourceScope
        {
            queryContext.BeginIncludeScope();

            var includeRelatedValuesStrategies
                = includeRelatedValuesStrategyFactories
                  .Select(f => f())
                  .ToList();

            var relatedEntitiesLoaders
                = includeRelatedValuesStrategies
                  .Select <IIncludeRelatedValuesStrategy, RelatedEntitiesLoader>(s => s.GetRelatedValues)
                  .ToArray();

            return(innerResults
                   .Select(qss =>
            {
                queryContext.QueryBuffer
                .Include(
                    qss.GetResult(querySource),
                    navigationPath,
                    relatedEntitiesLoaders,
                    querySourceRequiresTracking);

                return qss;
            })
                   .Finally(() =>
            {
                foreach (var includeRelatedValuesStrategy in includeRelatedValuesStrategies)
                {
                    includeRelatedValuesStrategy.Dispose();
                }

                queryContext.EndIncludeScope();
            }));
        }