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