2015-11-28 2 views
0

Как ниже содержание может быть преобразовать в XML с помощью LINQЗапись XmlElement с помощью LINQ в C#

List<int> calllist = new List<int>(); 
calllist.Add(10); 
calllist.Add(5); 
calllist.Add(1); 
calllist.Add(20); 

Вывод должен быть:

<root> 
    <child> 
     <name>1</name> 
     <count>1</count> 
    </child> 
    <child> 
     <name>5</name> 
     <count>1</count> 
    </child> 
    <child> 
     <name>10</name> 
     <count>1</count> 
    </child> 
    <child> 
     <name>20</name> 
     <count>1</count> 
    </child> 
</root> 

Я пытался что-то вроде:

XElement root = new XElement ("root", 
    new XElement("child",new XElement(from c in calllist select c; /*error here*/))); 

Но застрял и не смог продолжить. Может ли кто-нибудь поделиться решением для этой работы?

+0

Существует целое пространство имен, посвященные использованию LINQ к XML, прочитать https://msdn.microsoft.com/en-us/library/bb387061.aspx –

+0

'XmlElement' и' XmlAttribute' являются из старого DOM API. Для LINQ to XML вы хотите 'XElement' и' XAttribute', чтобы начать с ... –

+0

@JonSkeet спасибо .. Я импортировал Xml.Linq и обновил сообщение. –

ответ

0

@ user833985

Попробуйте нижеследующее.

XElement root = new XElement(
      "root", from c in calllist orderby c select 
      new XElement("child", 
       new XElement("name", c), 
        new XElement("count",calllist.Count)) 

      ); 
+0

Не будет ли каждый элемент «count» иметь 4 в качестве контента? Я не уверен, что он должен иметь от вопроса, но я сомневаюсь, что это правильно. Я думаю, вы хотите сгруппировать с помощью c, а затем использовать подсчет группы, но это не ясно из вопроса. – Hogan

0
XElement root = 
    new XElement("root", 
    calllist 
     .GroupBy(c => c) 
     .OrderBy(g => g.Key) 
     .Select(g => new XElement("child", 
           new XElement("name", g.Key), 
           new XElement("count",g.Count()) 
           ) 
      ) 
); 
Смежные вопросы