2015-10-13 48 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; 
    })