C# Linq到XML连接并添加数据?

C# Linq到XML连接并添加数据?,c#,xml,join,linq-to-xml,C#,Xml,Join,Linq To Xml,给定如下XML: <Root> <Element> <Id>1</Id> </Element> <Element> <Id>2</Id> </Element> <Element> <Id>3</Id> </Element> </Root>

给定如下XML:

<Root>
    <Element>
        <Id>1</Id>
    </Element>
    <Element>
        <Id>2</Id>
    </Element>
    <Element>
        <Id>3</Id>
    </Element>
</Root>
<Root>
    <Element>
        <Id>1</Id>
        <Data>429</Data>
    </Element>
    <Element>
        <Id>2</Id>
        <Data>271</Data>
    </Element>
    <Element>
        <Id>3</Id>
        <Data>328</Data>
    </Element>
</Root>
是否有一种优雅的方法,可以使用LINQ to XML将IEnumerable数据与基于公共
Id
的XML连接起来,而无需单独查询要链接数据的每个元素

因此,结果如下所示:

<Root>
    <Element>
        <Id>1</Id>
    </Element>
    <Element>
        <Id>2</Id>
    </Element>
    <Element>
        <Id>3</Id>
    </Element>
</Root>
<Root>
    <Element>
        <Id>1</Id>
        <Data>429</Data>
    </Element>
    <Element>
        <Id>2</Id>
        <Data>271</Data>
    </Element>
    <Element>
        <Id>3</Id>
        <Data>328</Data>
    </Element>
</Root>

一种方法是使用
元组。(元素
是包含ID和数据的类。)


您可能可以执行以下操作:

var elements = MyXDoc.Elements("Element");
elements.Apply(e => e.Add(new XElement("Data", MyIEnumerable.FirstOrDefault(d => d.Id == e.Element("Id").Value).Data)));            
其中,
Apply
扩展方法定义为:

public static class Extensions
{
    public static void Apply<T>(this IEnumerable<T> enumerable, Action<T> action)
    {
        foreach (var item in enumerable)
        {
            action(item);
        }
    }
}
公共静态类扩展
{
公共静态无效应用(此IEnumerable可枚举,操作)
{
foreach(可枚举中的变量项)
{
行动(项目);
}
}
}
var elements = MyXDoc.Elements("Element");
elements.Apply(e => e.Add(new XElement("Data", MyIEnumerable.FirstOrDefault(d => d.Id == e.Element("Id").Value).Data)));            
public static class Extensions
{
    public static void Apply<T>(this IEnumerable<T> enumerable, Action<T> action)
    {
        foreach (var item in enumerable)
        {
            action(item);
        }
    }
}