0

所以我对 Stream Insight 相当陌生,这可能是一个相当基本的问题,但似乎不支持按事件类型过滤查询(见下文),那么应该如何完成呢?

为了充实我的问题,这是我的 CepStream ......

var stockStream = CepStream<MarketDataPoint>.Create(appName, typeof(MarketdataPointInputAdapterFactory), new MarketDataAdapterConfig(), EventShape.Point);

..这是我的查询...

var patternResult = from w in stockStream.Where(x => x is FxSpot)
                                            .AlterEventDuration(e => TimeSpan.FromMinutes(1))
                                            .SnapshotWindow(SnapshotWindowOutputPolicy.Clip)
                                        select new MarketDataPointEvent() {Price = w.Max(e => e.Price)};

...运行时产生此异常: Microsoft 复杂事件处理 LINQ 提供程序不支持以下表达式:(x 是 FxSpot)

据我了解,我可以创建多个适配器而不是有效地执行过滤器,但这似乎不是它“应该”完成的方式。

任何建议将不胜感激!

马特

4

2 回答 2

1

我会尽量远离 is 运算符进行类型比较。这是一个使用 LINQPad 的示例,我强烈推荐使用它。在这种情况下,过滤器由库存完成。使用 CTI 自动插入

AdvanceTimeSettings.IncreasingStartTime

样本

void Main()     
{

    var marketReadings = new []
                    {
                    new MarketDataPoint() { Stock = "MSFT", Value = 30.0, Timestamp = DateTime.Parse("11/19/2012 4:10:00 PM") },
                    new MarketDataPoint() { Stock = "MSFT", Value = 30.1, Timestamp = DateTime.Parse("11/19/2012 4:11:00 PM") },
                    new MarketDataPoint() { Stock = "GOOG", Value = 667.97, Timestamp = DateTime.Parse("11/19/2012 4:12:00 PM") },
                    new MarketDataPoint() { Stock = "GOOG", Value = 667.51, Timestamp = DateTime.Parse("11/19/2012 4:12:00 PM") },
                };

            var stockStream = marketReadings.ToPointStream(Application, e=> PointEvent.CreateInsert(e.Timestamp,e),AdvanceTimeSettings.IncreasingStartTime);  

            var patternResult = from w in stockStream.Where(x => x.Stock == "MSFT")
                                                    .AlterEventDuration(e => TimeSpan.FromMinutes(1))
                                                    .SnapshotWindow(SnapshotWindowOutputPolicy.Clip)
                                                select new  {Price = w.Max(e => e.Value)}   ;

            patternResult.Dump();   
        }


        public class MarketDataPoint
        {
            public string Stock { get; set; }
            public double Value { get; set; }
            public DateTime Timestamp { get;set;}

        }

}
于 2012-11-26T00:59:59.397 回答
0

您定义的负载类型是 MarketDataPoint。这定义了事件的架构并根据事件结构:“StreamInsight 服务器中的事件是字段的有序列表,而不是 .NET 结构,它不会对其字段施加顺序。”

您尝试完成的一个潜在解决方法是在包含 FxSpot 的 MarketDataPoint 中包含所有需要的字段。然后向 MarketDataPoint 添加一个附加属性来定义它是什么类型的 MarketDataPoint。

于 2012-11-26T02:40:27.200 回答