private static IQueryableResolver CreateResolver()

in src/Epam.GraphQL/Configuration/Implementations/Fields/ChildFields/QueryableFieldBase.cs [171:224]


        private static IQueryableResolver<TEntity, TReturnType, TExecutionContext> CreateResolver(
            string fieldName,
            Func<IResolveFieldContext, IQueryable<TReturnType>> query,
            Func<IResolveFieldContext, IQueryable<TReturnType>, IQueryable<TReturnType>> transform,
            Expression<Func<TEntity, TReturnType, bool>> condition,
            ISearcher<TReturnType, TExecutionContext>? searcher,
            IEnumerable<(LambdaExpression SortExpression, SortDirection SortDirection)> naturalSorters,
            IProxyAccessor<TEntity, TExecutionContext> outerProxyAccessor,
            IObjectGraphTypeConfigurator<TReturnType, TExecutionContext>? configurator)
        {
            if (configurator == null)
            {
                return new QueryableAsyncFuncResolver<TEntity, TReturnType, TReturnType, TExecutionContext>(
                    fieldName,
                    GetQuery(configurator, query),
                    condition,
                    transform,
                    ApplySort(null, searcher, naturalSorters),
                    outerProxyAccessor,
                    IdentityProxyAccessor<TReturnType, TExecutionContext>.Instance);
            }

            var sorters = configurator.Sorters;

            return new QueryableAsyncFuncResolver<TEntity, TReturnType, Proxy<TReturnType>, TExecutionContext>(
                fieldName,
                GetQuery(configurator, query),
                condition,
                transform,
                ApplySort(sorters, searcher, naturalSorters),
                outerProxyAccessor,
                configurator.ProxyAccessor);

            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;
                };
            }
        }