linq где список содержит любой в списке
используя linq, как я могу получить список элементов, где его список атрибутов соответствует другому списку?
возьмем этот простой пример и псевдокод:
List<Genres> listofGenres = new List<Genre>() { "action", "comedy" });
var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres);
4 ответа:
звучит так, как вы хотите:
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));
или такой
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();