我确实有以下LINQ查询,从我的数据库中选择包含给定搜索字符串的电影,或者我有一个或多个我给该函数的标记。
问题是,如果搜索字符串或tags参数为空/ null,我就没有电影。然而,所需的操作是获取所有电影,因此,如果一个参数为空或空,我不想应用它。
我该怎么做?
public IEnumerable<Group<Genre, Movie>> GetMoviesGrouped(string search, List<Tag> tags)
{
var movies = from movie in Movies
where ( movie.Name.Contains(search)) && movie.Tags.Any(mt => tags.Any(t => t.ID == mt.ID))
group movie by movie.genre into g
select new Group<Genre, Movie> { Key = g.Key, Values = g };
....
}
答案 0 :(得分:3)
为了便于阅读,我喜欢一步一步地做到这一点
var movies = Movies;
if (!string.IsNullOrEmpty(search))
movies = movies.Where(m => m.Name.Contains(search));
if (tags != null && tags.Any()) {
var tagIds = tags.Select(m => m.ID);
movies = movies.Where(m => m.Tags.Any(x => tagIds.Contains(x.ID));
}
var result = from movie in movies
group ...
答案 1 :(得分:2)
如果没有提供任何内容,您可以执行此类操作以跳过检查:
where (string.IsNullOrEmpty(search) || movie.Name.Contains(search)) &&
(!tags.Any() || movie.Tags.Any(mt => tags.Any(t => t.ID == mt.ID)))