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

## Comments