Share via


New in V1.2: Primitive Event Types

In a previous posting, we introduced nested types as one of the new features in StreamInsight V1.2. The second improvement in the type system represents the other end of the complexity spectrum, namely the ability to use "primitive" event types, without any struct or class. Remember the LINQ statement to compute the distances between two vehicles in that posting:

var distance = from a in vehicleA
              from b in vehicleB
              select new
              {
                  distance = Math.Sqrt(
                      Math.Pow(a.Loc.X – b.Loc.X, 2) +
                      Math.Pow(a.Loc.Y – b.Loc.Y, 2))
              };

Wouldn’t it be nice to be able to write this as:

var distance = from a in vehicleA
              from b in vehicleB
              select Math.Sqrt(
                  Math.Pow(a.Loc.X – b.Loc.X, 2) +
                  Math.Pow(a.Loc.Y – b.Loc.Y, 2));

Yes, it would – and in V1.2 you can! The type of this is now simply a CepStream<double>, and you can use it like this:

var result = from d in distance
             where d > 9
             select d;

Beauty! But wait, there is more: in V1.2, we also enabled the LINQ Let clause. We can consolidate the above statements nicely into a single one:

var withLet = from r in vehicleA
             from l in vehicleB
             let d = Math.Sqrt(
                 Math.Pow(r.Loc.X - l.Loc.X, 2) +
Math.Pow(r.Loc.Y - l.Loc.Y, 2))
             where d > 9
             select d;

You can find this example attached to run in LINQPad.

See how we can create a very concise StreamInsight sample over a stream of int in LINQPad:

var source = Enumerable.Range(1, 100).ToPointStream(
                Application,
                ev => PointEvent.CreateInsert(
                    DateTimeOffset.Now.AddMinutes(ev), ev),
                AdvanceTimeSettings.StrictlyIncreasingStartTime);

var result = from win in source.TumblingWindow(TimeSpan.FromMinutes(5))
            select win.Avg(e => e);

result.ToPointEnumerable().Where(e => e.EventKind == EventKind.Insert).Dump();

Alright, this query doesn’t really make a lot of sense, but you get the idea. This sample is also included in the set of new LINQPad samples – just update your LINQPad driver to get them.

Regards,
The StreamInsight Team

New in V12 Primitive Types.linq