Wie kann ich mit linq eine Liste von Elementen abrufen, deren Attributliste mit einer anderen Liste übereinstimmt?
Nehmen Sie dieses einfache Beispiel und den Pseudocode:
List<Genres> listofGenres = new List<Genre>() { "action", "comedy" });
var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres);
.StartWith, .EndsWith, .Contains
von hier aus versucht , dass es funktioniert, aber was kann getan werden, um Ihre Abfrage zu verwendenContains
wiederholte Verwendung endet als O (x * y) -Operation in der Zeit, aber O (1) im Raum, wobei x die Größe der ersten Sammlung und y die Größe der zweiten ist. Die VerwendungIntersect
ist O (x + y) in der Zeit, aber O (y) im Raum - es wird ein Hashset aus der zweiten Sammlung erstellt, wodurch schnell geprüft werden kann, ob Elemente aus der ersten Sammlung enthalten sind. Siehe codeblog.jonskeet.uk/2010/12/30/… für DetailsSie können hierfür eine
Contains
Abfrage verwenden:quelle
Wenn Sie
HashSet
anstelle vonList
für verwendenlistofGenres
, können Sie Folgendes tun:quelle
Ich denke das ist auch so möglich?
Ist "TakeWhile" in Bezug auf Leistung oder Klarheit schlechter als "Where"?
quelle
TakeWhile
ist eine andere Funktion - sie hört auf zu iterieren, wenn keine Übereinstimmung gefunden wird.Oder so
...
quelle