Как динамически добавлять XElements в цикле?

Я получаю HybridDictionary со всеми дочерними элементами XElements.
Я не знаю заранее, сколько у меня там элементов.
Поэтому вместо этого:

xmlDoc.Element("Parent").Add(
     new XElement("Child", new XAttribute("Name", "Child1"),
           new XElement("Id", "796"),
           new XElement("Name", "gdsa")
           etc..
      ));  

Я пытаюсь сделать что-то вроде этого:

Strung [] allKeys = new String[ChildElements.Count];
TheHybridDictionary.Keys.CopyTo(allKeys, 0);

xmlDoc.Element("Parent").Add(
      new XElement("Child", new XAttribute("Name", "Child1"),
            for (int i = 0; i < TheHybridDictionary.Count; i++)
                   new XElement(allKeys[i], TheHybridDictionary[allKeys[i]])

Но как соединить все, что находится внутри цикла for, с частью конструкции XML-документа?


person user990635    schedule 10.09.2013    source источник
comment
Просто добавить их по одному?   -  person UIlrvnd    schedule 10.09.2013
comment
Да, точно.. из HybridDictionary. Сам цикл for правильный, но я не знаю, как его связать со всей структурой.   -  person user990635    schedule 10.09.2013
comment
Они должны быть под дочерним элементом, а не под родительским. Цикл заменяет идентификатор и имя в первом примере.   -  person user990635    schedule 10.09.2013
comment
О, я неправильно понял ваши скобки :). Вы все еще можете использовать это и для детей, хотя Linq лучше.   -  person UIlrvnd    schedule 10.09.2013


Ответы (2)


Проблема в том, что ваш класс HybridDictionary не реализует IEnumerable, поэтому вы не можете использовать LINQ для него напрямую.

Но вместо этого вы можете использовать массив строк allKeys:

string [] allKeys = new String[ChildElements.Count];
TheHybridDictionary.Keys.CopyTo(allKeys, 0);

xmlDoc.Element("Parent").Add(
    new XElement("Child", new XAttribute("Name", "Child1"),
        allKeys.Select(x => new XElement(x, TheHybridDictionary[x])))
person MarcinJuraszek    schedule 10.09.2013

Вы можете использовать метод .Add(), как в комментарии Стефана, или использовать LINQ:

xmlDoc.Element("Parent").Add(
  new XElement("Child", new XAttribute("Name", "Child1"),
        TheHybridDictionary.Select(kvp => new XElement(kvp.Key, kvp.Value)));
person FarmerBob    schedule 10.09.2013
comment
Убедитесь, что вы используете System.Linq вверху. - person FarmerBob; 10.09.2013
comment
Я использую System.Linq - person user990635; 10.09.2013
comment
Похоже, что HybridDictionary не реализует IEnumerable, как это делает стандартный Dictionary<TKey, TValue>. - person MarcinJuraszek; 10.09.2013