настраиваемый фильтр 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 поскольку он позволяет использовать только свойства Movieclass, и коллекции туда не принимаются. Можно ли реализовать такой фильтр с горячим шоколадом?

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.
Другие вопросы по тегам