Korzystając z linq, w jaki sposób mogę pobrać listę elementów, których lista atrybutów jest zgodna z inną listą?
Weźmy ten prosty przykład i pseudo kod:
List<Genres> listofGenres = new List<Genre>() { "action", "comedy" });
var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres);
.StartWith, .EndsWith, .Contains
z tutaj to działa, ale co można zrobić, aby wykorzystać zapytanieContains
Wielokrotne użycie kończy się jako operacja O (x * y) w czasie, ale O (1) w przestrzeni, gdzie x jest rozmiarem pierwszej kolekcji, a y jest rozmiarem drugiej. UżycieIntersect
jest O (x + y) w czasie, ale O (y) w przestrzeni - konstruuje hashset z drugiej kolekcji, co pozwala szybko sprawdzić, czy został uwzględniony dowolny element z pierwszej kolekcji. Zobacz codeblog.jonskeet.uk/2010/12/30/… po szczegółyMożesz użyć
Contains
do tego zapytania:źródło
Jeśli używasz
HashSet
zamiastList
forlistofGenres
, możesz:źródło
Myślę, że to też jest możliwe w ten sposób?
Czy „TakeWhile” jest gorsze niż „Where” pod względem wydajności lub przejrzystości?
źródło
TakeWhile
jest inną funkcją - zatrzyma iterację, jeśli nie znajdzie dopasowania.Albo w ten sposób
...
źródło