说我有以下课程:
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])
这样的查询可能吗?
答案 0 :(得分:6)
是的,使用Zip
和Skip
(假设是.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
大于第一个条目的每个值。