Usando linq, ¿cómo puedo recuperar una lista de elementos donde su lista de atributos coincide con otra lista?
Tome este simple ejemplo y pseudo código:
List<Genres> listofGenres = new List<Genre>() { "action", "comedy" });
var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres);
.StartWith, .EndsWith, .Contains
desde aquí , funciona, pero ¿qué se puede hacer para usar su consulta?Contains
repetido termina como una operación O (x * y) en el tiempo, pero O (1) en el espacio, donde x es el tamaño de la primera colección e y es el tamaño de la segunda. El uso deIntersect
es O (x + y) en el tiempo pero O (y) en el espacio: construye un conjunto de hash de la segunda colección, lo que agiliza la verificación de la inclusión de cualquier elemento de la primera colección. Consulte codeblog.jonskeet.uk/2010/12/30/… para más detallesPuede utilizar una
Contains
consulta para esto:fuente
Si usa en
HashSet
lugar deList
forlistofGenres
puede hacer:fuente
¿Supongo que esto también es posible así?
¿Es "TakeWhile" peor que "Where" en términos de rendimiento o claridad?
fuente
TakeWhile
es una función diferente: dejará de iterar cuando no encuentre una coincidencia.O así
...
fuente