En utilisant linq, comment puis-je récupérer une liste d'éléments où sa liste d'attributs correspond à une autre liste?
Prenons cet exemple simple et pseudo-code:
List<Genres> listofGenres = new List<Genre>() { "action", "comedy" });
var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres);
.StartWith, .EndsWith, .Contains
partir d' ici cela fonctionne, mais que peut-on faire pour utiliser votre requêteContains
répétée se termine par une opération O (x * y) dans le temps, mais O (1) dans l'espace, où x est la taille de la première collection et y est la taille de la seconde. UtiliserIntersect
is O (x + y) dans le temps mais O (y) dans l'espace - il construit un jeu de hachage à partir de la deuxième collection, ce qui permet de vérifier rapidement l'inclusion de tout élément de la première collection. Voir codeblog.jonskeet.uk/2010/12/30/… pour plus de détailsVous pouvez utiliser une
Contains
requête pour cela:la source
Si vous utilisez
HashSet
au lieu deList
for,listofGenres
vous pouvez faire:la source
Je suppose que c'est aussi possible comme ça?
"TakeWhile" est-il pire que "Where" en termes de performances ou de clarté?
la source
TakeWhile
est une fonction différente - il arrêtera d'itérer s'il ne trouve pas de correspondance.Ou comme ça
...
la source