Don*_*hes 1 c# xml linq linq-to-xml
使用LINQ to XML,如何基于序数位置连接两组数据?
<document>
<set1>
<value>A</value>
<value>B</value>
<value>C</value>
</set1>
<set2>
<value>1</value>
<value>2</value>
<value>3</value>
</set2>
</document>
Run Code Online (Sandbox Code Playgroud)
根据上面的片段,我想加入两组,使"A"和"1"在同一记录中,"B"和"2"在同一记录中,"C"和"3" "在同一记录中.
这就是Enumerable.Zip扩展在.NET 4中的作用.您可以像这样编写它(假设这是整个XDocument):
var set1Elements = document.Element("set1").Elements();
var set2Elements = document.Element("set2").Elements();
var results = set1Elements.Zip(set2Elements,
(s1, s2) => new { Value1 = s1.Value, Value2 = s2.Value });
Run Code Online (Sandbox Code Playgroud)
如果您使用的是.NET 3.5或更早版本,则编写Zip扩展程序并不困难:
public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(
this IEnumerable<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, TResult> resultSelector)
{
using (var firstEnumerator = first.GetEnumerator())
using (var secondEnumerator = second.GetEnumerator())
{
while ((firstEnumerator.MoveNext() && secondEnumerator.MoveNext()))
{
yield return resultSelector(firstEnumerator.Current,
secondEnumerator.Current);
}
}
}
Run Code Online (Sandbox Code Playgroud)