Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida na condição ternária

se (!string.IsNullOrEmpty(buscaAlbum) ? f.Album.Titulo.Contains(buscaAlbum) : true )

--> se (!string.IsNullOrEmpty(buscaAlbum) ? f.Album.Titulo.Contains(buscaAlbum) ==> eu verifico se o parâmetro passado está contido no Título. Até aí ok

caso contrário --> : true A pergunta é: porque está devolvendo true e não false, pois a primeira condição já está satisfatória?

 var query = from f in contexto.Faixas
                        where f.Album.Artista.Nome.Contains(buscaArtista)
                        && (!string.IsNullOrEmpty(buscaAlbum) ? f.Album.Titulo.Contains(buscaAlbum) : true )
                        orderby f.Album.Titulo, f.Nome
                        select f;
3 respostas
solução!

Olá, Ivanostik Lopes!

Vamos ver de perto o que essa condição faz:

!string.IsNullOrEmpty(buscaAlbum) ? f.Album.Titulo.Contains(buscaAlbum) : true

Se o parâmetro de busca buscaAlbum foi fornecido, a condição pegará somente os álbuns do artista cujo título contenha a string buscaAlbum. Caso contrário, a condição pegará todos os álbuns do artista (true).

Imagine na vida real: quando o usuário digita um texto de uma busca qualquer, o filtro é acionado para aquele texto. Quando o usuário deixa o texto de busca vazio, o filtro é desligado (para pegar todos os elementos da coleção).

Se trocarmos true por false, significa que nunca poderemos trazer todos os álbuns de um artista. Não poderemos mais fazer uma simples busca por artista, forçando nosso usuário a buscar artista+álbum.

Obrigado, Marcelo Oliveira!

Sempre às ordens! ;-)