linq dove lista contiene qualsiasi in elenco

Usando linq, come posso recuperare un elenco di elementi in cui il suo elenco di attributi corrisponde ad un altro elenco?

Prendi questo semplice esempio e lo pseudo codice:

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

Sembra che tu voglia:

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

o fornire il predicato nella chiamata Any per fare tutto in una volta:

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

Puoi utilizzare una query Contains per questo:

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

O come questo

 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(); 

Immagino che anche questo sia ansible in questo modo?

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

“TakeWhile” è peggio di “Where” in termini di prestazioni o chiarezza?