Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Usando o Linq

Boa noite com o uso do Linq, na aula esta o codigo:

_context.Filmes.Skip(skip).Take(take).Where(filme => filme.Sessoes.Any(sessao => sessao.Cinema.Nome == nomeCinema).ToList()

Suponhamos que eu queira o cinema zambir, do filme zumbi, que é lançamento, e acabou de entrar em cartaz, e em nossa tabela de filmes ja tivessemos 100 filmes. Na ordem em que o linq está, Skip..Take..Where, poderia o cinema não ser encontrado?

não seria melhor filtrar 1o pelo nome do cinema e depois fazer o skip e o take? _context.Filmes.Where(filme => filme.Sessoes.Any(sessao => sessao.Cinema.Nome == nomeCinema).Skip(skip).Take(take).ToList()

1 resposta
solução!

Oi Marcelo, bom dia!

Você está absolutamente certo em sua observação. A ordem das operações no LINQ pode influenciar bastante no desempenho e no resultado da consulta. Quando você utiliza Skip e Take antes do Where, você está primeiro paginando os dados e depois filtrando. Isso pode fazer com que filmes que pertencem ao cinema que você está procurando sejam ignorados se não estiverem na página atual.

Para garantir que você está filtrando corretamente antes de paginar, a ordem correta seria aplicar o Where antes do Skip e Take. Dessa forma, você primeiro filtra os filmes pelo cinema desejado e só então aplica a paginação. O código ficaria assim:

var filmes = _context.Filmes
    .Where(filme => filme.Sessoes.Any(sessao => sessao.Cinema.Nome == nomeCinema))
    .Skip(skip)
    .Take(take)
    .ToList();

Dessa maneira, você garante que apenas os filmes do cinema "Zambir" serão considerados na paginação, evitando que algum filme relevante seja excluído da consulta.

Espero ter ajudado e bons estudos!