How can I iterate over a collection using Foreach to create an XDocument?

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(); } 
+4
source share
2 answers

You need to change customers.ForEach to customers.ConvertAll .

+4
source

ForEach returns void, not a link to the newly created collection.

Next works

 using System; using System.Collections.Generic; using System.Xml.Linq; using System.Linq; namespace test_xml3 { class Program { static void Main(string[] args) { List customers = new List { 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 customers) { XDocument xdoc = new XDocument ( new XDeclaration("1.0", "utf-8", "yes"), new XElement("customers", from c in customers select 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; } } } 
+6
source

Source: https://habr.com/ru/post/1316262/


All Articles