假设我有一个已知结束时间的间隔事件,是否有办法在所述间隔事件到期之前触发另一个事件。这样做的目的是在那时我需要做一个聚合。
或者有一种方法可以进行查询(这不是所希望的,但我可能不得不诉诸它)
(from input in inputStream
select input).AddDelay(input.EndTime - DateTime.UtcNow)
如果我的理解完全没有,请提出更好的方法。
答案 0 :(得分:1)
首先,我们需要过滤您的源流以获取x1事件流。
var x1Stream = from e in sourceStream
where e.ItemId == "X1"
select new {e.ItemId, e.Timestamp}
接下来,我们需要过滤您的源流以获取非x1事件流。
var nonX1Stream = from e in sourceStream
where e.ItemId != "X1"
select e;
现在我们将使用非x1事件流加入x1事件流,以获取x1事件期间发生的所有非x1事件的列表。
var x = from l in x1Stream
from r in nonX1Stream
select new {l.ItemId, l.Timestamp, r};
计算x1事件期间发生的非x1事件将需要某种HoppingWindow能够在固定的时间段内实际计算流中的事件。您也可以调用ToEnumerable()以便能够在没有窗口的情况下进行分组。
var y = from e in x.ToEnumerable()
group e by new {e.ItemId, e.Timestamp}
into g
select new {g.Key.ItemId, g.Key.Timestamp, Count = g.Count()};