THE SQL Server Blog Spot on the Web

Welcome to SQLblog.com - The SQL Server blog spot on the web Sign in | |
in Search

StreamInsight Team

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

Published Monday, July 25, 2011 5:34 PM by Roman Schindlauer
Filed under:

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

Leave a Comment

(required) 
(required) 
Submit

About Roman Schindlauer

Program Manager in the StreamInsight team.
Powered by Community Server (Commercial Edition), by Telligent Systems
  Privacy Statement