我有这个方法给我一个由演员
拍摄的过滤电影的集合private IList<Movie> FilterByActor(IList<Actor> Actors)
{
//from moviesToFilter from context
return Actors != null ? moviesToFilter
.Where(movie => Actors.All(requiredActor =>
movie.MovieActor.Any(movieActor => movieActor.Actor == requiredActor)))
.ToList() : null;
}
问题是Actors的期望我想通过导演,作家,流派等进行过滤。对于每个过滤器,我需要一个类似的方法来使我的代码超重。
因此,有一种方法可以构建适当的查询。
我知道Expression表用于此表,我之前构建了一些简单的查询。但是这个查询要复杂得多,我不知道如何动态构建它。
任何想法或例子?
答案 0 :(得分:0)
您可以通过一个方法来完成主过滤,该方法采用描述要搜索的集合的函数(演员,导演等)。
public IList<Movie> FilterByActor(ICollection<Actor> actors) {
return FilterBy(m => m.MovieActor, actors);
}
public IList<Movie> FilterByDirector(ICollection<Director> directors) {
return FilterBy(m => m.MovieDirectors, directors);
}
private IList<Movie> FilterBy<T>(Func<Movie, ICollection<T>> fn, ICollection<T> required) {
return moviesToFilter.Where(m => fn(m).Any(a => required.Contains(a))).ToList();
}