1

終了時刻がわかっている間隔イベントがあるとします。間隔イベントの有効期限が切れる前に、別のイベントを発生させる方法はありますか。これの目的は、その時点で集計を行う必要があることです。

または、クエリを実行する方法はありますか (これは望ましい方法ではありませんが、それに頼る必要があるかもしれません)

(from input in inputStream
select input).AddDelay(input.EndTime - DateTime.UtcNow)

私の理解が完全にずれている場合は、より良いアプローチを提案してください。

4

1 に答える 1

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()};
于 2012-08-10T19:46:24.467 に答える