linq donde la lista contiene cualquiera en la lista

Usando linq, ¿cómo puedo recuperar una lista de elementos donde su lista de atributos coincide con otra lista?

Tome este ejemplo simple y pseudo código:

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

Parece que quieres:

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

o proporcionando el predicado en Any llamada para hacerlo todo de una vez:

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

Puede usar una consulta Contains para esto:

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

O así

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

 var listofGenres = new List { "action", "comedy" }; var Movies = new List {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(); 

¿Supongo que esto también es posible así?

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

¿Es “TakeWhile” peor que “Where” en sentido de rendimiento o claridad?