2012-02-07 3 views
1

Я пишу метод преобразования datatable с помощью LINQ. Я был в состоянии получить прямое преобразование из DataTable в XML, как показано ниже:Datatable to XML using LINQ

XDocument doc = new XDocument(new XDeclaration("1.0","UTF-8","yes"), 
    new XElement("pfolios", from p in dt.AsEnumerable() 
    select new XElement("pfolio", 
     new XAttribute("ID", p.ID), 
     new XAttribute("Date", p.Date), 
     new XAttribute("Expired", p.Expiry)))); 

, но мне нужна помощь, чтобы написать метод, который принимает DataTable с любым количеством колонок в качестве входных данных и записи в XML-то вроде этого: Это выражение lamdba не работает, но я ищу способ упростить это. Заранее спасибо за помощь

XElement xe = new XElement("pfolios", from p in dt.AsEnumerable() 
      select new XElement("pfolio",dt.AsEnumerable().ToList().ForEach(dc=> dt.Columns) 
new XAttribute(dc.ColumnName, p[dc.ColumnName]))); 

ответ

2

Вы ищете

table.AsEumerable().Select(row => 
    new XElement("row", 
     table.Columns.Cast<DataColumn>().Select(col => 
      new XAttribute(col.ColumnName, row[col]) 
     ) 
    ) 
) 
+0

Это работает .. спасибо очень много !! Думаю, мне нужно вернуться и отточить мои навыки LINQ :) Любая хорошая книга/сайт, который вы можете предложить? – user799891

+0

http://linqpad.net – SLaks

3

Попробуйте это

XElement container = new XElement("container"); 

using (XmlWriter w = container.CreateWriter()) { 

    DataTable.WriteXml(w, System.Data.XmlWriteMode.WriteSchema, true); 
}