Não consegui entender muito bem como foi possível imprimir no console, a associação correta entre os GeneroId feita pelo join.
Aqui foi colocado:
join m in root.Element("Musicas").Elements("Musica")
on g.Element("GeneroId").Value equals m.Element("GeneroId").Value
Porém, no select, cria-se um objeto anônimo assim:
select new
{
Musica = m.Element("Nome").Value,
Genero = g.Element("Nome").Value
};
Em seguida, quando vamos imprimir os valores no console, chamamos:
foreach (var musica in query)
{
Console.WriteLine("{0}\t{1}", musicaEgenero.Musica, musicaEgenero.Genero);
}
Pelo que entendi, a associação de "GeneroId" entre Musica e Genero não foi usada. Parece que simplesmente imprimiu o nome da primeira música e o nome do primeiro gênero, uma vez que dentro do objeto anônimo só foi utilizado "Nome".
Se tivéssemos 10 músicas de 10 gêneros (listados de 1 a 10) diferentes, sendo que a primeira música tivesse um GeneroId de valor 7, ao imprimir o nome da música e o gênero, da mesma forma que foi feito ali em cima, o nome do gênero estaria correto?