5

我正在尝试使用热巧克力代码优先方法实现类似于此处描述的过滤模型。如果至少有一个演员符合某些标准,我需要过滤电影。模型如下所示:

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类的属性,并且不接受集合。是否可以用热巧克力实现这样的过滤器?

4

1 回答 1

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.
于 2021-08-24T09:08:12.517 回答