1

类似于这个问题:

LINQ、迭代器、选择和投影

我想在投影中使用计数器或递增变量 - 但是我想在多个投影中使用相同的计数器。我正在使用基于不同数据源的多个投影构造一个 xml 文档,但需要维护一个“id”节点(其中 id 是一个递增值)。

我可以使用类似的东西为一个投影实现这一点

Dim x as New XElement("rootNode", list.Select(Of XElement)(Function(xe, count) new XElement("blah", count+1)))

然后我想将另一组 XElements 添加到根,继续从前一个值的计数器


编辑:注意 - 上面可能没有很好地描述我的问题 - 我想询问一个 xml 文档(由上面的列表表示)并基于一组节点,将一些新节点添加到另一个文档。然后在文档中查询另一组节点,并将更多新节点添加到另一个文档中,保持两组之间的递增计数器。

IE

Dim orig = <root>
                       <itemtype1>
                           <item>
                               <name>test</name>
                               <age>12</age>
                           </item>
                           <item>
                               <name>test2</name>
                               <age>13</age>
                           </item>
                       </itemtype1>
                       <itemtype2>
                           <item>
                               <name>testing</name>
                               <age>15</age>
                           </item>
                           <item>
                               <name>testing</name>
                               <age>14</age>
                           </item>
                       </itemtype2>
                   </root>

    Dim newX As New XElement("test", orig.Descendants("itemtype1"). _
                             Descendants("item").Select(Of XElement)(Function(xe, count) New XElement("blah", New XElement("id", count))), _
                                                        orig.Descendants("itemtype2"). _
                             Descendants("item").Select(Of XElement)(Function(xe, count) New XElement("blah", New XElement("id", count))))

理想情况下,这将输出:

 <test>
  <blah>
    <id>0</id>
  </blah>
  <blah>
    <id>1</id>
  </blah>
  <blah>
    <id>2</id>
  </blah>
  <blah>
    <id>3</id>
  </blah>
</test>
4

1 回答 1

1

最简单的可能是连接你的两个序列:

Dim x as New XElement("rootNode", list.Concat(list2) _
                                      .Select(Of XElement)(Function(xe, count) _
                                          New XElement(xe, count + 1)) _
                     )

(为便于阅读而格式化。)

于 2010-02-09T03:27:09.733 回答