Linq查询 - 查找连续增加的值

时间:2011-09-09 20:47:01

标签: linq

说我有以下课程:

internal class ModuleScrap
    {
        public System.DateTime ReadTime { get; set; }
        public int NetScrap { get; set; }
    }

我想要一个Linq查询,它根据ReadTime为我找到大于之前NetScrap值的所有NetScrap值。所以,查询看起来像这样:

MyList
   .OrderBy(row => row.ReadTime)
   .Where (row => row.NetScrap > [The Previous NetScrap Value])

这样的查询可能吗?

1 个答案:

答案 0 :(得分:6)

是的,使用ZipSkip(假设是.NET 4):

// Avoid having to do the ordering twice
var ordered = list.OrderBy(row => row.ReadTime).ToList();

var greater = ordered.Zip(ordered.Skip(1), (x, y) => new { x, y })
                     .Where(p => p.y.NetScrap > p.x.NetScrap)
                     .Select(p => p.y);

用自己跳过的序列压缩一个序列会给你一对连续的元素:

Original           a  b  c  d  e  f
Original.Skip(1)   b  c  d  e  f  g

如果您阅读上面的每一栏,您就可以获得配对。从那里,您只需要选择第二个条目NetScrap大于第一个条目的每个值。