StreamInsight - 将字符串csv PointEvent转换为多个int PointEvent

时间:2013-09-14 11:30:10

标签: c# linq system.reactive streaminsight

我可以在UDSO中做到这一点:

public sealed class PromoIdsToEvents : CepPointStreamOperator<string, int>
{
    public override IEnumerable<int> ProcessEvent(PointEvent<string> inputEvent)
    {
        if (inputEvent.Payload.Length > 0)
        {
            string[] separator = new[] { "," };
            string[] idStrings = inputEvent.Payload.Split(separator, StringSplitOptions.RemoveEmptyEntries);

            foreach (var p in idStrings)
            {
                yield return int.Parse(p);
            }
        }
    }

    public override bool IsEmpty
    {
        get { return false; }
    }
}

是否可以在查询中完成所有操作?所有这一切都是建立一个IEnumberable:

var multipleEventsAsInts = from c in csvEvents
                           let split = c.Split(',').Select(int.Parse)
                           select split;

2 个答案:

答案 0 :(得分:1)

您可以在一个主题中完成这项工作,但我认为您通过UDSO的方式是以程序方式使用StreamInsight事件的正确方法。

通过创建UDSO,您现在拥有了可重复使用的代码块。如果您只是在查询逻辑中完成了这项工作,那么您将无法轻松地重复使用它。

答案 1 :(得分:0)

TXPower绝对正确。此外,UDSO比在查询中使用UDF(静态方法)更有效。 但是,您的示例UDSO可能会更好一点......请注意,ProcessEvent的返回值是IEnumerable。你不需要一次收回一个;创建你的枚举(一个数组会很好),然后简单地返回它。