2016-04-18 2 views
3

У меня есть этот XML блок:Как я могу заполнить кортеж, используя LINQ?

<difficulties> 
    <difficulty difficultyId="1"> 
     <parameter key="maxNumerator" value="10"></parameter> 
     <parameter key="maxDenominator" value="15"></parameter> 
     <parameter key="couple" value="2"></parameter> 
    </difficulty> 
    <difficulty difficultyId="2"> 
     <parameter key="maxNumerator" value="20"></parameter> 
     <parameter key="maxDenominator" value="30"></parameter> 
     <parameter key="couple" value="2"></parameter> 
    </difficulty> 
    ... 
</difficulties> 

То, что я хотел бы сделать, это извлечь образец, похожий на:

difficultyId, key, value 

как:

1, maxNumerator, 10 
1, maxDenominator, 10 
1, couple, 2 
2, maxNumerator, 20 
... 

Есть ли какой-то способ Я могу вставить его в список кортежей (предполагая, что я уже загрузил xml-документ в xDocument). Я хотел бы использовать LINQ:

List<Tuple<string, string, string>> res = from a in xDocument.Descendants("difficulties") 
              ...? 

ответ

3

Вы можете сделать SelectMany:

var res =(from a in xDocument.Descendants("difficulty") 
      from parameter in a.Elements("parameter") 
      select new Tuple<string,string,string>(a.Attribute("difficultyId").Value, 
                parameter.Attribute("key").Value, 
                parameter.Attribute("value").Value)).ToList(); 
+0

работает отлично, большое спасибо :-) – brinch

+0

вы радушны;) – octavioccl

Смежные вопросы