Аналогично этому вопросу:
LINQ, итераторы, выбор и проекция
Я хочу использовать счетчик или инкрементную переменную в проекции, однако я хочу использовать один и тот же счетчик в нескольких проекциях. Я создаю XML-документ, используя несколько проекций на основе разных источников данных, но мне нужно поддерживать узел «id» (где id — это увеличивающееся значение).
Я могу добиться этого для одной проекции, используя что-то похожее на
Dim x as New XElement("rootNode", list.Select(Of XElement)(Function(xe, count) new XElement("blah", count+1)))
Затем я хочу добавить еще одну группу XElements в корень, продолжая счетчик от предыдущего значения
Редактировать: Примечание. Вышеприведенное, возможно, не очень хорошо описывает мою проблему. Я хочу опросить XML-документ (который был представлен в списке выше) и на основе одного набора узлов добавить несколько новых узлов в другой документ. Затем опросите документ на наличие другого набора узлов и добавьте еще несколько новых узлов в другой документ, поддерживая увеличивающийся счетчик для обоих наборов.
i.e.
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>