假设我有一个已知结束时间的间隔事件,有没有办法在所述间隔事件到期之前触发另一个事件。这样做的目的是在那一点上我需要做一个聚合。
或者有没有办法进行查询(这不是所希望的,但我可能不得不求助于它)
(from input in inputStream
select input).AddDelay(input.EndTime - DateTime.UtcNow)
如果我的理解完全不正确,请提出更好的方法。
假设我有一个已知结束时间的间隔事件,有没有办法在所述间隔事件到期之前触发另一个事件。这样做的目的是在那一点上我需要做一个聚合。
或者有没有办法进行查询(这不是所希望的,但我可能不得不求助于它)
(from input in inputStream
select input).AddDelay(input.EndTime - DateTime.UtcNow)
如果我的理解完全不正确,请提出更好的方法。
首先,我们需要过滤您的源流以获取 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()};