настраиваемый фильтр hotchocolate на родительском на основе дочерней коллекции
Я пытаюсь реализовать аналогичную описанной здесь модели фильтрации с подходом, основанным на горячем шоколаде. Мне нужно отфильтровать фильмы, если хотя бы один из их актеров соответствует определенным критериям. Модель выглядит так:
public class Movie
{
public IList<Actor> Actors { get; set; }
}
public class Actor { }
public class MovieTypeDef : ObjectType<Movie>
{
protected override void Configure(IObjectTypeDescriptor<Movie> descriptor)
{
descriptor.Field(x => x.Actors)
.Type<NonNullType<ListType<NonNullType<ActorTypeDef>>>>();
}
}
public class ActorTypeDef : ObjectType<Actor> { }
public class Query
{
public IList<Movie> Movies()
{
return new List<Movie>();
}
}
public class QueryTypeDef : ObjectType<Query>
{
protected override void Configure(IObjectTypeDescriptor<Query> descriptor)
{
descriptor.Field(x => x.Movies())
.Type<NonNullType<ListType<MovieTypeDef>>>()
.UseFiltering<MoviesFileringTypeDef>();
}
}
public class MoviesFileringTypeDef : FilterInputType<Movie>
{
protected override void Configure(IFilterInputTypeDescriptor<Movie> descriptor)
{
descriptor.Filter(x => x.Actors) // compilation error
}
}
Похоже, что нет возможности добавить собственный фильтр в MoviesFileringTypeDef
поскольку он позволяет использовать только свойства Movie
class, и коллекции туда не принимаются. Можно ли реализовать такой фильтр с горячим шоколадом?
1 ответ
I also faced a similar kind of issue while I was trying to apply a filter on the parent entity based on the child entity field. I believe in your case you need to apply a filter in your MovieTypeDef also with QueryType as below:-
public class MovieTypeDef : ObjectType<Movie>
{
protected override void Configure(IObjectTypeDescriptor<Movie> descriptor)
{
descriptor.Field(x => x.Actors)
.Type<NonNullType<ListType<NonNullType<ActorTypeDef>>>>()
.UseFiltering<YourModel>();;
}
}
After this change, you can apply a filter on a nested level also as you can apply with the parent level.