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