Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Analise de Afinidade

Referente as consultas abaixo:

var musicas = contexto.Faixas.Where(f=> f.Nome == nomeDaMusica).Select(f.FaixaID); 

var query = from comprouItem in contexto.ItemNotaFiscal
        join comprouTbm in contexto.ItemNotaFical
        on comprouItem.NotaFiscalID equals comprouTbm.NotaFiscalID
        where musicas.Contains(comprouItem.FaixaID) 
        && comprouItem.FaixaID != comprouTbm.FaixaID
        select comprouTbm

Por que não podemos fazer o "where" da seguinte maneira?

where comprouItem.Contains(musicas.FaixaID);

ou

where comprouItem.FaixaID == musicas.FaixaID
1 resposta

Olá, Denise!

De acordo com o código, a variável musicas é do tipo IEnumerable<Faixa>.

Você sugeriu que usemos where comprouItem.Contains(musicas.FaixaID);, porém vamos dar uma olhada na assinatura do método Contains:

https://msdn.microsoft.com/en-us/library/bb352880(v=vs.110).aspx

public static bool Contains<TSource>(
    this IEnumerable<TSource> source,
    TSource value
)

Um exemplo de uso de Contains é:

bool temManga = frutas.Contains(manga);

Ou seja, o tipo frutas deve ser um IEnumerable<Fruta>. Porém, comprouItem.Contains(musicas.FaixaID) é inválido porque comprouItem não é um IEnumerable<Faixa>, e sim um tipo ItemNotaFiscal.

Quanto a where comprouItem.FaixaID == musicas.FaixaID, também é inválido, porque musicas não é um tipo Faixa e sim um tipo IEnumerable<Faixa>, e assim não podemos acessar a propriedade FaixaID.