不是聚合增量,而是每个元素的增量。下面是一些代码来解释我的意思:
var deltaTotals = _deltaEnumerable.Select(a => a.Amount).ToList();
var oldTotals = _totalsEnumerable.Select(d => d.Amount).ToList();
// trigger change in _totalsEnumerable
// ** can LINQ do the lines below
var newTotals = totalsEnumerable.Select(d => d.Amount);
for (var i = 0; i < 7; i++) {
var newAmount = oldTotals[i] - deltaTotals[i];
Assert.That(newTotals.ElementAt(i), Is.EqualTo(newAmount));
}
最后四行代码似乎在 LINQ 中可能有更优雅的方式。
干杯,
贝瑞尔
最佳答案
你想要的是Enumerable.Zip扩展方法。
一个示例用法是:
var delta = oldTotals.Zip(newTotals, (o, n) => n.Amount - o.Amount);
请注意,这是 .NET 4.0 的新功能。在 .NET 3.5 中,您必须编写自己的扩展。像这样:
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);
}
}
}
关于c# - 我可以在 LINQ 中获取两个 IEnumerables 的增量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2352379/