Linq中的多维数组

时间:2009-11-10 10:44:16

标签: xml linq

我有一个类似于以下内容的XML文件:

<novel>
  <paragraphs>
     <paragraph>
         <choice>This is paragraph 1</choice>
         <choice>Paragraph 1 alternative text</choice>
     </paragraph>
     <paragraph>
         <choice>This is paragraph 2</choice>
         <choice>Paragraph 2 alternative text</choice>
     </paragraph>
  </paragraphs>
</novel>

我正在使用LINQ将其读入我的程序。我还在学习LINQ。我希望对段落和选择进行二维数组映射,即段落[0] [0] =“这是段落1”和段落[1] [1] =“段落2替代文本”。

问题是我不确定如何在LINQ中嵌套这些数组。我在那一刻:

var paragraphsQuery =
   from paragraphsNode in xDoc.Elements("novel").Elements("paragraphs")
   from choiceNodes in paragraphsNode.Elements("paragraph").Elements("choice")
   select choiceNodes.Value;

...但是这给了我一个所有选择的数组(我丢失了段落隔离)。似乎某种程度上我需要从select中的语句中做更多的事情?

有人可以给我任何建议吗?谢谢。

1 个答案:

答案 0 :(得分:2)

您需要以下内容:

var paragraphsQuery = xDoc.Elements("novel")
                          .Elements("paragraphs")
                          .Elements("paragraph")
                          .Select(p => p.Elements("choice")
                                        .Select(c => c.Value)
                                        .ToList())
                          .ToList();

换句话说,在顶层你想要每个“paragraph”元素一个项目。然后,对于每个项目,您要查找“choice”元素的值,并将它们转换为列表。

(那将使用列表而不是数组 - 如果你真的想要,你可以使用数组,但是列表通常更容易使用。)