Usando o linq, como posso recuperar uma lista de itens cuja lista de atributos corresponde a outra lista?
Veja este exemplo simples e pseudocódigo:
List<Genres> listofGenres = new List<Genre>() { "action", "comedy" });
var movies = _db.Movies.Where(p => p.Genres.Any() in listofGenres);
.StartWith, .EndsWith, .Contains
partir daqui funciona, mas o que pode ser feito para usar sua consultaContains
repetidamente acaba como uma operação O (x * y) no tempo, mas O (1) no espaço, onde x é o tamanho da primeira coleção ey é o tamanho da segunda. UsarIntersect
é O (x + y) no tempo, mas O (y) no espaço - ele constrói um hashset da segunda coleção, o que torna mais rápido verificar a inclusão de qualquer item da primeira coleção. Consulte codeblog.jonskeet.uk/2010/12/30/… para obter detalhesVocê pode usar uma
Contains
consulta para isso:fonte
Se você usar em
HashSet
vez deList
for,listofGenres
poderá fazer:fonte
Eu acho que isso também é possível assim?
É "TakeWhile" pior do que "Onde" em termos de desempenho ou clareza?
fonte
TakeWhile
é uma função diferente - ela irá parar de iterar quando não encontrar uma correspondência.Ou assim
...
fonte