linq列表中包含任何列表

使用LINQ,我怎样才能检索它的属性列表匹配另一个列表的项目列表?

拿这个简单的例子和​​伪代码:

List<Genres> listofGenres = new List<Genre>() { "action", "comedy" }); var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres); 

听起来像你想要的:

 var movies = _db.Movies.Where(p => p.Genres.Intersect(listOfGenres)).Any(); 

或者在Any呼叫中提供谓词以一次性完成:

 var movies = _db.Movies.Any(p => p.Genres.Intersect(listOfGenres)); 

你可以使用一个Contains查询来做到这一点:

 var movies = _db.Movies.Where(p => p.Genres.Any(x => listOfGenres.Contains(x)); 

我猜这样也可能是这样的?

 var movies = _db.Movies.TakeWhile(p => p.Genres.Any(x => listOfGenres.Contains(x)); 

在性能或清晰度方面,“TakeWhile”比“Where”更糟?

或者像这样

 class Movie { public string FilmName { get; set; } public string Genre { get; set; } } 

 var listofGenres = new List<string> { "action", "comedy" }; var Movies = new List<Movie> {new Movie {Genre="action", FilmName="Film1"}, new Movie {Genre="comedy", FilmName="Film2"}, new Movie {Genre="comedy", FilmName="Film3"}, new Movie {Genre="tragedy", FilmName="Film4"}}; var movies = Movies.Join(listofGenres, x => x.Genre, y => y, (x, y) => x).ToList();