C# Linq到XElement,多参数

C# Linq到XElement,多参数,c#,linq,linq-to-xml,xelement,C#,Linq,Linq To Xml,Xelement,我正在创建一个XElement对象,在使用Linq向节点添加多个元素时遇到问题 有一个具有多个属性的对象列表: class Point { int x; int y; ... } List<Point> Points = new List<Point>() { new Point(1,2), new Point(3,4) }; 到目前为止,我得到的最远的结果是: new XElement("Points", Points.Select(a =>

我正在创建一个
XElement
对象,在使用Linq向节点添加多个元素时遇到问题

有一个具有多个属性的对象列表:

class Point { int x; int y; ... }

List<Point> Points = new List<Point>()
{ 
  new Point(1,2), 
  new Point(3,4) 
};
到目前为止,我得到的最远的结果是:

new XElement("Points",
  Points.Select(a => new {
    X = new XElement("x", a.x),
    Y = new XElement("y", a.y)
  });
它生成一个嵌套列表,解析为单个
XElement

<Points>{ X = <x>1</x>, Y = <y>2</y> }{ X = <x>3</x>, Y = <y>4</y> }</Points>

以下将起作用:

var xml= new XElement("Points", 
    Points.SelectMany(a => new [] { new XElement("x", a.x), new XElement("y", a.y)}));
或者,如果要将每个点包装在其自己的元素中,则:

var xml= new XElement("Points", 
    Points.Select(a => 
        new XElement("Point", new XElement("x", a.x), new XElement("y", a.y))));
诀窍是始终添加
XElement
的对象。
您使用的代码将重新运行一个
匿名对象
,而不是需要的这个XElement数组

工作起来很有魅力,非常感谢!另外,
点。选择(a=>new[]…
也有效。
var xml= new XElement("Points", 
    Points.SelectMany(a => new [] { new XElement("x", a.x), new XElement("y", a.y)}));
var xml= new XElement("Points", 
    Points.Select(a => 
        new XElement("Point", new XElement("x", a.x), new XElement("y", a.y))));