如何将两个XElements与linq select结合使用?

我正在尝试将两个XElements列表合并为一个:

var list1 = XElement.Parse(@"          ").XPathSelectElements("Element").ToList(); var list2 = XElement.Parse(@"  ").XPathSelectElements("Element").ToList(); var res = from e2 in list2 join e1 in list1 on e2.Attribute("name").Value equals e1.Attribute("name").Value select new XElement(e1.Add(e2.Element("ChildElement"))); 

代码将无法编译,因为select是错误的(XElement.Add()返回void)。

如何组合两个XElements:e1和e2在select中并返回新的xelement(e2与e1中的子元素)

我想获得这种格式的列表:

            

我会抛弃XPath并使用LINQ to XML查询方法来查找元素。 您的select需要复制第二个元素的名称和属性以及第一个元素中的子元素:

 var results = from e2 in second.Descendants("Element") join e1 in first.Descendants("Element") on (string)e2.Attribute("name") equals (string)e1.Attribute("name") select new XElement(e2.Name, e2.Attributes(), e1.Elements()); 

请在此处查看工作演示: https : //dotnetfiddle.net/J3mcXu

您收到错误的原因是Select()操作必须返回一个对象。 您实际上是在尝试在Select()操作中执行foreach,而不是它使用的操作。 LINQ不包含foreach op,因为它可能有副作用,所以你应该使用另一种方法。

编辑:我最初发布的内容将连接列表而不是合并它们。 我打算发布另一个答案,但是@Charles Mager发布了最简单的解决方案来解决你想要做的事情。 我在这里留下这个答案虽然解释了为什么你的尝试选择语句不能正常工作。