linq où liste contient toute la liste
À l'aide de linq, comment puis-je récupérer une liste d'articles où la liste de ses attributs correspondent à une autre liste?
Prendre cet exemple simple et de la pseudo-code:
List<Genres> listofGenres = new List<Genre>() { "action", "comedy" });
var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres);
Vous devez vous connecter pour publier un commentaire.
Sonne comme vous voulez:
.StartWith, .EndsWith, .Contains
à partir de ici cela fonctionne, mais ce qui peut être fait pour utiliser votre requêteContains
à plusieurs reprises termine aussi un O(x*y) de l'opération 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. À l'aide deIntersect
est O(x+y) dans le temps mais O(y) dans l'espace, il construit un hashset à partir de la deuxième collection, ce qui le rend rapide pour vérifier l'inclusion de n'importe quel élément de la première collection. Voir codeblog.jonskeet.royaume-uni/2010/12/30/... pour plus de détailsVous pouvez utiliser un
Contains
requête pour cela:Si vous utilisez
HashSet
au lieu deList
pourlistofGenres
que vous pouvez faire:Je suppose que c'est également possible, comme ça?
Est "TakeWhile" pire que le "Où" dans le sens de la performance ou de la clarté?
TakeWhile
est une fonction différente - il arrêter l'itération quand il ne trouve pas de correspondance.Ou comme ce
...