2
respostas

Uso da clausula Where em XML

Acredito que tenha ficado faltando um exemplo de como utilizar a instrução where no contexto do XML, podemos inserir no momento da coleta dos elementos ou após o join e antes do select ?

Como ficaria o where das musicas apenas com generos iguais a 1 ? no contexto abaixo:

var query = from g in root.Element("Generos").Elements("Genero")
join m in root.Element("Musicas").Elements("Musica")
    on g.Element("GeneroId").Value equals m.Element("GeneroId").Value
select new
{
    MusicaId = m.Element("MusicaId").Value,
    Musica = m.Element("Nome").Value,
    Genero = g.Element("Nome").Value
};
<?xml version="1.0" encoding="utf-8" ?>
<AluraTunes>
    <Generos>
        <Genero>
            <GeneroId>1</GeneroId>
            <Nome>Rock</Nome>
        </Genero>
        <Genero>
            <GeneroId>2</GeneroId>
            <Nome>Reggae</Nome>
        </Genero>
        <Genero>
            <GeneroId>3</GeneroId>
            <Nome>Classica</Nome>
        </Genero>
    </Generos>
    <Musicas>
        <Musica>
            <MusicaId>1154</MusicaId>
            <Nome>Sweet Child O' Mine</Nome>
            <GeneroId>1</GeneroId>
            <Compositor>Guns n Roses</Compositor>
            <Milissegundos>356424</Milissegundos>
            <Bytes>5879347</Bytes>
            <PrecoUnitario>0.99</PrecoUnitario>
        </Musica>
        <Musica>
            <MusicaId>900</MusicaId>
            <Nome>I Shot The Sheriff</Nome>
            <GeneroId>2</GeneroId>
            <Compositor>Marley</Compositor>
            <Milissegundos>263862</Milissegundos>
            <Bytes>8738973</Bytes>
            <PrecoUnitario>0.99</PrecoUnitario>
        </Musica>
        <Musica>
            <MusicaId>3445</MusicaId>
            <Nome>Danubio Azul</Nome>
            <GeneroId>3</GeneroId>
            <Compositor>Johann Strauss II</Compositor>
            <Milissegundos>526696</Milissegundos>
            <Bytes>8610225</Bytes>
            <PrecoUnitario>0.99</PrecoUnitario>
        </Musica>
    </Musicas>
</AluraTunes>
2 respostas

Eu fiz algo nesse sentido, mas nao obtive muito sucesso:

var query = from g in root.Element("Generos").Elements("Genero")
                        join m in root.Element("Musicas").Elements("Musica")
                        on g.Element("GeneroId").Value equals m.Element("GeneroId").Value  
                        where g.Element("GeneroId").Value == "1"
                        select new
                        {
                            MusicaId = m.Element("MusicaId").Value,
                            Musica = m.Element("Nome").Value,
                            Genero = g.Element("Nome").Value
                        };
O post foi fechado por inatividade. Para continuar o assunto, recomendamos criar um novo tópico. Bons Estudos!