2008-12-10 10 views
2

J'ai besoin de retourner une liste de l'élément <AssetText>. Ma requête ci-dessous ne renvoie que la première AssetText. Toutes les pensées ont beaucoup apprécié.linq to xml: comment sélectionner la valeur des éléments

var q = from c in xDoc.Descendants("Product") 
     where (int) c.Element("ProductView").Element("ViewId") == 44 
     select (string) c.Element("ProductView").Element("AssetText").Element("Text"); 

 

<Product> 
    <ProductView> 
    <ViewId>44</ViewId> 
    <AssetText> 
     <Text>my first Asset Text</Text> 
    </AssetText> 
    <AssetText> 
     <Text>my second Asset Text</Text> 
    </AssetText> 
    </ProductView> 
    <ProductView> 
    <ViewId>45</ViewId> 
    <AssetText> 
     <Text>my third Asset Text</Text> 
    </AssetText> 
    </ProductView> 
</Product> 

Répondre

8

changement Element("AssetText")-Elements("AssetText") pour obtenir tous les éléments AssetText. Notez que vous devrez également modifier le reste de votre requête, sinon elle ne correspondra que lorsque le premier ProductView aura un ViewId de 44. Je vous suggère d'utiliser une seconde clause "from":

var q = from c in xDoc.Descendants("Product") 
     from view in c.Elements("ProductView") 
     where (int) view.Element("ViewId") == 44 
     from assetText in view.Elements("AssetText") 
     select assetText.Element("Text"); 
Questions connexes