回答:
あなたが望むように聞こえます:
var movies = _db.Movies.Where(p => p.Genres.Intersect(listOfGenres).Any());
Contains
繰り返し使用すると、時間の経過とともにO(x * y)操作として終了しますが、空間ではO(1)となります。ここで、xは最初のコレクションのサイズ、yは2番目のコレクションのサイズです。使用時Intersect
はO(x + y)、空間内はO(y)-2番目のコレクションからハッシュセットを作成します。これにより、最初のコレクションのアイテムが含まれているかどうかをすばやく確認できます。詳細については、codeblog.jonskeet.uk / 2010/12/30 /…を参照してください
またはこのように
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();
.StartWith, .EndsWith, .Contains
、ここから機能しましたが、クエリを使用するために何ができるか