C# Linq到XML连接并添加数据?
给定如下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>
<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);
}
}
}