The following code gives me an error:
The best overloaded method match for 'System.Xml.Linq.XElement.XElement (System.Xml.Linq.XName, object)' has some invalid arguments.
What do I need to change so that I can iterate through my List<Customer> collection with Foreach creating an XDocument?
using System; using System.Collections.Generic; using System.Xml.Linq; namespace test_xml3 { class Program { static void Main(string[] args) { List<Customer> customers = new List<Customer> { new Customer {FirstName="Jim", LastName="Smith", Age=27}, new Customer {FirstName="Hank", LastName="Moore", Age=28}, new Customer {FirstName="Jay", LastName="Smythe", Age=44} }; Console.WriteLine(BuildXmlWithLINQ(customers)); Console.ReadLine(); } private static string BuildXmlWithLINQ(List<Customer> customers) { XDocument xdoc = new XDocument ( new XDeclaration("1.0", "utf-8", "yes"), new XElement("customers", customers.ForEach(c => new XElement("customer", new XElement("firstName", c.FirstName), new XElement("lastName", c.LastName) ) ) ); return xdoc.Declaration.ToString() + Environment.NewLine + xdoc.ToString(); } } public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } } }
Added:
Thanks for all your answers, I also came up with what works:
private static string BuildXmlWithLINQ2(List<Customer> customers) { XDocument xdoc = new XDocument( new XDeclaration("1.0", "utf-8", "yes") ); XElement xRoot = new XElement("customers"); xdoc.Add(xRoot); foreach (var customer in customers) { XElement xElement = new XElement("customer", new XElement("firstName", customer.FirstName), new XElement("lastName", customer.LastName), new XElement("age", customer.Age) ); xRoot.Add(xElement); } return xdoc.Declaration.ToString() + Environment.NewLine + xdoc.ToString(); }