Yanıtlar:
İstediğin gibi geliyor:
var movies = _db.Movies.Where(p => p.Genres.Intersect(listOfGenres).Any());
Contains
Tekrar tekrar kullanılması , zamanda bir O (x * y) işlemi olarak sona erer, ancak uzayda O (1), burada x ilk koleksiyonun boyutu ve y, ikincinin boyutudur. Kullanılması Intersect
sürede O (x + y) ancak O (y) uzayda - bu hızlı ilk koleksiyonundan herhangi bir öğe için eklenmesi için kontrol kolaylaştırır ikinci koleksiyonundan bir HashSet oluşturur. Ayrıntılar için codeblog.jonskeet.uk/2010/12/30/… bakın
Eğer kullanırsanız HashSet
yerine List
için listofGenres
yapabileceğiniz:
var genres = new HashSet<Genre>() { "action", "comedy" };
var movies = _db.Movies.Where(p => genres.Overlaps(p.Genres));
Veya bunun gibi
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
dan buraya çalıştığını, ama ne Sorgunuzla kullanmak yapılabilir