Programing

목록에 목록에있는 항목이있는 linq

crosscheck 2020. 8. 9. 09:47
반응형

목록에 목록에있는 항목이있는 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());

이를 위해 Contains쿼리를 사용할 수 있습니다 .

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

for HashSet대신 사용 하면 다음을 수행 할 수 있습니다.ListlistofGenres

var genres = new HashSet<Genre>() { "action", "comedy" };   
var movies = _db.Movies.Where(p => genres.Overlaps(p.Genres));

이것도 가능할까요?

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

참고 URL : https://stackoverflow.com/questions/10667675/linq-where-list-contains-any-in-list

반응형