private static IRootQueryableResolver CreateResolver()

in src/Epam.GraphQL/Configuration/Implementations/Fields/ChildFields/RootQueryableFieldBase.cs [191:235]


        private static IRootQueryableResolver<TReturnType, TExecutionContext> CreateResolver(
            Func<IResolveFieldContext, IQueryable<TReturnType>> query,
            Func<IResolveFieldContext, IQueryable<TReturnType>, IQueryable<TReturnType>> transform,
            ISearcher<TReturnType, TExecutionContext>? searcher,
            IEnumerable<(LambdaExpression SortExpression, SortDirection SortDirection)> naturalSorters,
            IObjectGraphTypeConfigurator<TReturnType, TExecutionContext>? configurator)
        {
            var sorters = configurator?.Sorters;

            if (configurator != null)
            {
                return new QueryableFuncResolver<TReturnType, Proxy<TReturnType>, TExecutionContext>(
                    configurator.ProxyAccessor,
                    GetQuery(configurator, query),
                    transform,
                    ApplySort(sorters, searcher, naturalSorters));
            }

            return new QueryableFuncResolver<TReturnType, TReturnType, TExecutionContext>(
                IdentityProxyAccessor<TReturnType, TExecutionContext>.Instance,
                GetQuery(null, query),
                transform,
                ApplySort(sorters, searcher, naturalSorters));

            static Func<IResolveFieldContext, IQueryable<TReturnType>> GetQuery(
                IObjectGraphTypeConfigurator<TReturnType, TExecutionContext>? configurator,
                Func<IResolveFieldContext, IQueryable<TReturnType>> queryFactory)
            {
                return context =>
                {
                    var filter = configurator != null && configurator.HasInlineFilters ? configurator.CreateInlineFilters() : null;

                    var query = queryFactory(context);

                    if (filter != null)
                    {
                        var listener = context.GetListener();
                        var ctx = context.GetUserContext<TExecutionContext>();
                        query = filter.All(listener, query, ctx, context.GetFilterValue(filter.FilterType));
                    }

                    return query;
                };
            }
        }