2015-10-13 49 views
0

我有IEnumerable序列bids其中每个元素都有卷字段。 如何使用Linq跳过聚合体积小于某个阈值skipVolume的所有第一个元素?如何创建LINQ表达式?

所以像:

bids.SkipWhile(sum of (s=>s.volume) skiped < skipVolume) 
+0

LINQ是不是真的适合你的聚合计算,因为你必须在某个点终止它(如果你确实真的很想,你可以使用Aggregate来返回它到达的索引,但是你会有一个带有条件的丑陋lambda表达式)。我会首先找到使用传统循环达到阈值的索引,然后使用该数字使用跳过/获取(或仅填充该循环内的新集合)。 – moarboilerplate

回答

0

您可以使用where条款,你都计算累积量和测试针对skipVlolume

var aggVolume = 0d; 
    var subBids = bids.Where(x => { 
    aggVolume += x.volume; 
    return aggVolume >= skipVolume; 
    })