Datatable to XML using LINQ

2019-08-06 13:51发布

问题:

I am writing a method to convert datatable using LINQ. I was able to get straight forward conversion from datatable to XML as below:

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))));

but I need some help to write a method, that takes datatable with any number of columns as input and write to xml something like this: This lamdba expression does not work but I am looking for a way to simplify this. Thanks in advance for your help

  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])));

回答1:

You're looking for

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


回答2:

Try this

XElement container = new XElement("container");

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

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