2012-01-10 3 views
0

J'ai un vilain xml (si je pouvais changer) que je devrais être capable de traiter. Je voulais regrouper par un attribut spécifique dans le XML pour un traitement ultérieur. Le problème est que certains des attributs ont un type = "A" et d'autres ont type = "A1", type = "A2", etc. Je veux tous les éléments qui ont une valeur de type d'attribut qui commence par "A" être groupés ensemble.Comment puis-je Substring XAttribute Value à partir de LINQ

Ce ne fonctionne pas et je ne sais pas quoi changer pour le faire fonctionner:

var result = from ele in xdoc.Descendants(Namespace + "item") 
       let item= ele.Attribute("type").Value.Substring(1,1) 
       group ele by item into grp 
       select grp; 

Lorsque j'enlève la sous-chaîne il fonctionne très bien, mais ne signifie évidemment pas le groupe que je veux.

Erreur:

Error has been thrown by the target of an invocation 

Exemple XML:

<items> 
<item type="A" position="0"> 
    <itemvalue>10</itemvalue> 
</item> 
    <item type="A1" position="1"> 
    <itemvalue>20</itemvalue> 
</item> 
    <item type="A2" position="2"> 
    <itemvalue>30</itemvalue> 
</item> 
    <item type="B" position="0"> 
    <itemvalue>10</itemvalue> 
    </item> 
    <item type="B1" position="1"> 
    <itemvalue>20</itemvalue> 
    </item> 
    <item type="B2" position="2"> 
    <itemvalue>30</itemvalue> 
</item> 
</items> 

Répondre

2

Sans un compilateur à ma disposition et en tapant sur mon mobile, je dirais que vous devriez passer 0 comme premier argument à Substring, c'est-à-dire Substring(0,1).

+0

Oh mon dieu merci de faire ressembler à un idiot complet ... c'était totalement grâce @afrischke. Je suis un dev de sql et n'ai même pas pensé à la position 0 dans la sous-chaîne. – scarpacci

+0

Ne vous inquiétez pas, j'ai fait (et je ferai certainement) beaucoup plus d'erreurs embarrassantes moi-même. – afrischke

Questions connexes