New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

Javascript and LINQ

One of the things my company does on a monthly basis is hold technology meetings to allow the consultants to get together and discuss the latest technologies.  Having just come back from PDC there is definitely two technologies that stick out:  LINQ and Atlas.  In this month's meeting I plan on sharing what I have learned about LINQ.  As I dove into some of the new featuresets in the technology preview I began to come to the conclusion that a lot of what I love about javascript is being added to .NET.  Think I'm crazy?  Well here is just a few examples.

Inferred types
C# gets a new construct called var.  No, it does not stand for variant for those of you familiar with VB.  It means that the type of the variable is decided based off of the value that is set. 

For example
var i = 5;  //an int is assumed
var s = "a"; //a string is assumed

While javascript only has a few inherent types (Number, Date, String, and Object) this has always been the way variables are assigned a type, in fact, the syntax is exactly the same as C#. 

Dynamic Identifiers
A javascript object that has a property can be accessed in two ways.


The later way you may note is a string (and could be a variable as well).  This type of functionality allows for many interesting and powerful use cases that is not easily accomplished in .NET.

Well the equivalent in VB.NET is now

myobject.("FirstName") 'Note the .(

Extension Methods
For those of you who don't know, javascript is more of an emulation language than a real language.  It can emulate many things, including objects and inheritance (even multiple inheritance).  To define an object in javascript you would code the following.

function customer(ID) //Constructor
{ = ID;
 this.FirstName = '';
 this.LastName = '';

To instantiate the object you would write

var oCustomer = new customer(1); //note the inferred type

Lets say that this object is in a script libary that is outside of your control.  Lets also say that you feel there should be another method on this object to get the full name.  You could write your own script file containing the following code.

customer.prototype.GetFullName = function()
 return this.FirstName + ' ' + this.LastName;

By importing this script library into your page you could now invoke a method that extends the original object (hence Extension method).


You may be wondering what this has to do with .NET.  Well most of the magic that LINQ brings to the framework is accomplished through something called an Extension Method.  What They have done is allow for any object to be extended by simply importing a namespace that contains an extension method.  (Hopefully you see the similarity to JS).  Most of their samples involve extending the base IEnumerable type which most collections already implement.  Lets say we have the following C# code.

using System; //Needed to make LINQ work
using System.Query; //Needed to make LINQ work

namespace CountEx
 public static class MySample
  public static int MyCount(this System.Collections.IEnumerable source)
   int i = 100;
   foreach (object item in source)
   return i;

If I have a program that contains any collection (i.e. ArrayList) I can now extend the object by simply importing (using) the CountEx namespace.

using System; //Needed to make LINQ work
using System.Query; //Needed to make LINQ work
using CountEx; //Import Extended Method(s)

static void Main()
 ArrayList oArr = new ArrayList();

Note:  When working with the samples and incorrect documentation included, it took me some time to distinguish the difference between IEnumerable and IEnumerable<T>.  This is mainly because these two interfaces reside in different namespaces.  If you are planning on playing with the LINQ preview make sure you undersand the difference between these interfaces (i.e. IEnumerable is used in "old" collection objects whereas IEnumerable<T> is used in the new collections).

These are just a few similarities that I have seen and have time to mention.  Object Initializers have similarities with JSON, the ASP like <% %> syntax has similarities with the javascript eval, and things like closures will now be possible in .NET.  One thing to note is that the .NET implementation does not carry the bad baggage that javascript does.  All the stuff is type checked and will generate meaningful compile time errors (eventually). 

I should mention that I have been a VB programmer from the start.  When I started experimenting in javascript I was amazed at what I could do, only I did not have formal terms to call them.  I found it really interesting to listen to Anders Hejlsberg at PDC explain that javascript has its origins in languages like LISP/Scheme and not really java,  and that these types of constructs have been there for some time.

The .NET framework is just now starting to adopt these methodologies.  I find it interesting that the same time MS is focusing on this for the .NET framework they are also working on Atlas and making the support for Javascript better in VS.NET. 



Comment Form

Only registered users may post comments.


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Davies (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Steven Fisher (1)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out