<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>JSINQ - LINQ to Objects for JavaScript</title><link>http://jsinq.codeplex.com/project/feeds/rss</link><description>JSINQ  is a complete implementation of LINQ to Objects &amp;#40;the .NET 4.0 version&amp;#41; for JavaScript. It allows you to write SQL-like queries against arrays, DOM node lists or your own custom enumerable types.</description><item><title>Source code checked in, #76924</title><link>http://jsinq.codeplex.com/SourceControl/changeset/changes/76924</link><description>Upgrade&amp;#58; New Version of LabDefaultTemplate.xaml. To upgrade your build definitions, please visit the following link&amp;#58; http&amp;#58;&amp;#47;&amp;#47;go.microsoft.com&amp;#47;fwlink&amp;#47;&amp;#63;LinkId&amp;#61;254563</description><author>Project Collection Service Accounts</author><pubDate>Mon, 01 Oct 2012 21:29:18 GMT</pubDate><guid isPermaLink="false">Source code checked in, #76924 20121001092918P</guid></item><item><title>Source code checked in, #76923</title><link>http://jsinq.codeplex.com/SourceControl/changeset/changes/76923</link><description>Checked in by server upgrade</description><author>Project Collection Service Accounts</author><pubDate>Mon, 01 Oct 2012 21:23:54 GMT</pubDate><guid isPermaLink="false">Source code checked in, #76923 20121001092354P</guid></item><item><title>Reviewed: JSINQ 1.0.0.2 (Dec 26, 2011)</title><link>http://jsinq.codeplex.com/releases/view/43077#ReviewBy-xocoatzin</link><description>Rated 5 Stars &amp;#40;out of 5&amp;#41; - This little framework saved me a lot of time when writing a report system by filtering out data coming from ajax requests</description><author>xocoatzin</author><pubDate>Mon, 26 Dec 2011 19:40:50 GMT</pubDate><guid isPermaLink="false">Reviewed: JSINQ 1.0.0.2 (Dec 26, 2011) 20111226074050P</guid></item><item><title>New Post: Need an elaborate example with datasets declaration</title><link>http://jsinq.codeplex.com/discussions/271743</link><description>&lt;div style="line-height: normal;"&gt;
&lt;p&gt;&amp;#65279;&amp;#65279;&amp;#65279;&amp;#65279;&amp;#65279;&amp;#65279;&amp;#65279;&amp;#65279;&amp;#65279;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I am trying to use the JQINQ in my code but am unable to run it succesfully. I have added the library files to the project. I already have jquery libraries added to the pages. I have a data container like&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;var dataContainer[0] = {id:1, name:'allen'}&lt;/p&gt;
&lt;p&gt;&amp;#65279;var dataContainer[1] = {id:2, name:'John'}&lt;/p&gt;
&lt;p&gt;var dataContainer[2] = {id:3, name:'Paul'}&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Can I use this as&amp;nbsp;a dataset for querying like:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:blue"&gt;var&lt;/span&gt; query = &lt;span style="color:blue"&gt;new&lt;/span&gt; jsinq.Query(&lt;span style="color:#a31515"&gt;&amp;quot;from g1 in $0 select {id:g1.id ,name: g1.name} &amp;quot;&lt;/span&gt;);&lt;br&gt;
&lt;br&gt;
query.setValue(0, dataContainer);&lt;br&gt;
&lt;br&gt;
&lt;span style="color:blue"&gt;var&lt;/span&gt; filterCustomers = query.execute();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Can somebody please post&amp;nbsp;an example with datasets declared/defined??&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Sagar&lt;/p&gt;
&lt;/div&gt;</description><author>shirsath44</author><pubDate>Wed, 07 Sep 2011 11:11:52 GMT</pubDate><guid isPermaLink="false">New Post: Need an elaborate example with datasets declaration 20110907111152A</guid></item><item><title>Updated Wiki: Frequently asked questions</title><link>http://jsinq.codeplex.com/wikipage?title=Frequently asked questions&amp;version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Q: How fast is JSINQ?&lt;/h2&gt;A: JSINQ&amp;#39;s &amp;quot;Enumerable&amp;quot; implementation is not optimized for speed, but it is still reasonably fast, i.e. for the kind of datasets you deal with in a typical JavaScript application, the performance of JSINQs &amp;quot;Enumerable&amp;quot; implementation should be more than adequate. JSINQs query-compiler on the other hand is relatively slow, but since queries are generally compiled once and then never again, the impact of the query compilation on the overall performance of a JavaScript application should again be negligible. If you run into performance problems when using JSINQ, make sure your queries are defined in a scope where they are not compiled over and over again.&lt;br /&gt;
&lt;h2&gt;Q: Is JSINQ ready for production use?&lt;/h2&gt;A: Yes, for the most part! The &amp;quot;Enumerable&amp;quot; part of JSINQ is reasonably well-tested and is generally considered to be &amp;quot;safe&amp;quot; but the query compiler is still in a rather &amp;quot;experimental&amp;quot; stage. What you should note though is that if the query compiler produces correct output for a specific query, it is very likely to continue to do so in the future. In other words: bugs in the query compiler are likely to show up early and if a query compiles without errors once, it will not fail the second time (barring the influence of cosmic rays).&lt;br /&gt;
&lt;h2&gt;Q: Is JSINQ prone to &amp;quot;SQL injections&amp;quot;?&lt;/h2&gt;A: You mean JSINQ-injections? Yes it is, but &lt;b&gt;only if you are doing it wrong&lt;/b&gt;! Since you specify your queries as strings, they are &lt;i&gt;theoretically&lt;/i&gt; prone to the same kind of injection-type attacks that you get with SQL, &lt;b&gt;but&lt;/b&gt; only if you are piecing together your queries with unvalidated strings that you somehow obtain from the user. Of course that is absolutely not how you should write your queries. If you have to get variables into your query, &lt;b&gt;use placeholders&lt;/b&gt;! Placeholders are not replaced textually, i.e. you can&amp;#39;t hijack a JSINQ query using a bad string passed in via a placeholder. Also, since JSINQ runs on the client, even if it was prone to injection-type attacks, it wouldn&amp;#39;t really matter because &lt;b&gt;you should never trust anything that comes from the client, ever&lt;/b&gt;.&lt;br /&gt;
&lt;h2&gt;Q: Is JSINQ better than jQuery, Prototype,...?&lt;/h2&gt;A: No. JSINQ is not a general-purpose JavaScript framework, it is not a widget library, it is not an Ajax framework and it doesn&amp;#39;t try to be any of those things. You can easily combine JSINQ with those frameworks though.&lt;br /&gt;
&lt;h2&gt;Q: Does JSINQ support nested queries?&lt;/h2&gt;A: Theoretically: yes. You can assign query objects to placeholders or you can even define nested queries inline using anonymous functions.&lt;br /&gt;
&lt;h2&gt;Q: What does JSINQ stand for?&lt;/h2&gt;A: &lt;u&gt;J&lt;/u&gt;ava&lt;u&gt;S&lt;/u&gt;cript &lt;u&gt;IN&lt;/u&gt;tegrated &lt;u&gt;Q&lt;/u&gt;uery. And yes, it&amp;#39;s a misnomer because JSINQ isn&amp;#39;t really integrated into JavaScript at all.&lt;br /&gt;
&lt;h2&gt;Q: Is there a &amp;quot;JSINQ to XML&amp;quot;?&lt;/h2&gt;A: If by that you mean a JavaScript equivalent of LINQ to XML, then no. But there should be and you should probably be the one to write it (let me know if you do).&lt;br /&gt;
&lt;h2&gt;Q: How do you pronounce JSINQ?&lt;/h2&gt;A: I pronounce it Jay-Sink, but you may also pronounce it Jay-Ess-Ink or Ja-Zink (the sound a broken cash register makes).&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>kaijaeger</author><pubDate>Wed, 04 Aug 2010 06:50:49 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Frequently asked questions 20100804065049A</guid></item><item><title>Updated Wiki: Home</title><link>http://jsinq.codeplex.com/wikipage?version=20</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;JSINQ 1.0 out now!&lt;/h2&gt;JSINQ 1.0, the first &lt;b&gt;stable release&lt;/b&gt; of JSINQ is available for download right now! It is packed with new features such as
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Support for all .NET 3.5 query operators&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Experimental support for the &lt;b&gt;.NET 4.0 query operator &amp;quot;zip&amp;quot;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;100% lazy&lt;/b&gt; (uses deferred execution)&lt;/li&gt;
&lt;li&gt;Complete, fully tested &lt;b&gt;implementations of System.Collections.Generic.List&lt;/b&gt; and &lt;b&gt;System.Collections.Generic.Dictionary&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;toList, toDictionary and toLookup&lt;/b&gt; now available for jsinq.Enumerable&lt;/li&gt;
&lt;li&gt;Still &lt;b&gt;only 23 KB when minified&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://kaijaeger.com/downloads/jsinq/playground/" class="externalLink"&gt;Try it yourself online!&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;Get started with JSINQ&amp;#33;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsinq.codeplex.com/documentation?referringTitle=Home"&gt;Read the documentation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;What is JSINQ?&lt;/h2&gt;&lt;b&gt;JSINQ is the JavaScript library that allows you to write SQL-like queries against arrays and DOM node lists.&lt;/b&gt;&lt;br /&gt;JSINQ is a complete implementation of LINQ to Objects (the .NET 4.0 version) in JavaScript. What that means is that if you know LINQ and you know JavaScript, you know JSINQ. JSINQ is both an API-compatible implementation of System.Linq.Enumerable and a complete query-expression compiler. That&amp;#39;s right: &lt;i&gt;you can write LINQ-style queries in JavaScript&lt;/i&gt;. And if that isn&amp;#39;t enough: JSINQ is also very liberally licensed, well-document, well-tested (the Enumerable-part) and &lt;b&gt;a stable version has just been released&lt;/b&gt;. So give it a go!&lt;br /&gt;
&lt;h2&gt;What does it look like?&lt;/h2&gt;Let&amp;#39;s say you have a list of &lt;i&gt;customers&lt;/i&gt; and you want to assemble a list of your customers&amp;#39; lastnames, ordered by their frequency. With JSINQ, you can write something like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; result = 
    customers.groupBy(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(customer) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; customer.lastname; 
    }).
    select(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(g) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; {lastname: g.key, count: g.count()}; 
    }).
    orderByDescending(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(r) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; r.count; 
    });
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This will do the job, but it&amp;#39;s also rather difficult to read. That&amp;#39;s why JSINQ also lets you write the following:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; query = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; jsinq.Query(&amp;#39;\
    from customer &lt;span style="color:Blue;"&gt;in&lt;/span&gt; $0 \
    group customer by customer.lastname into g \
    select {lastname: g.key, count: g.count()} \
    into r \
    orderby r.count descending \
    select r \
&amp;#39;);

query.setValue(0, customers);
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; result = query.execute();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Confused? What&amp;#39;s with all the backslashes?&lt;/b&gt; Please read: &lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;JSINQ in a nutshell&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;What can I do with JSINQ?&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Write arbitrarily complex queries against JavaScript arrays, DOM node lists or your own enumerable types&lt;/li&gt;
&lt;li&gt;Find elements in the HTML DOM tree using SQL-like queries&lt;/li&gt;
&lt;li&gt;Dynamically create HTML elements from JSON you have received via XMLHttpRequest in a declarative manner&lt;/li&gt;
&lt;li&gt;Tinker with XML and turn it into something else&lt;/li&gt;
&lt;li&gt;Combine it in interesting ways with the JavaScript-/Ajax-frameworks you are already using&lt;/li&gt;
&lt;li&gt;Write less code by exploiting the power of declarative programming&lt;/li&gt;
&lt;li&gt;And for the ambitious: write &lt;a href="http://blogs.msdn.com/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes-a-fully-linqified-raytracer.aspx" class="externalLink"&gt;raytracers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx" class="externalLink"&gt;monadic parser combinators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, etc.&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Using JSINQ&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;JSINQ in a nutshell&lt;/a&gt;&lt;/b&gt; (new to JSINQ?, read this!)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/documentation?referringTitle=Home"&gt;JSINQ Documentation&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=Frequently%20asked%20questions&amp;referringTitle=Home"&gt;Frequently asked questions&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Previous work&lt;/h2&gt;JSINQ isn&amp;#39;t the first attempt at implementing LINQ in JavaScript. There is also Chris Pietschmann&amp;#39;s &lt;a href="http://www.codeplex.com/JSLINQ" class="externalLink"&gt;LINQ to JavaScript&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (right here on CodePlex), there is &lt;a href="http://plugins.jquery.com/project/jLINQ" class="externalLink"&gt;jLINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and then there is &lt;a href="http://netindonesia.net/blogs/jimmy/archive/2007/07/16/Javascript-LINQ_3F003F003F00_.aspx" class="externalLink"&gt;this&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>kaijaeger</author><pubDate>Wed, 04 Aug 2010 06:49:38 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100804064938A</guid></item><item><title>Closed Issue: EqualityComparer error [5326]</title><link>http://jsinq.codeplex.com/workitem/5326</link><description>I tryed to use distinct with equalityComparer without any luck.&lt;br /&gt;When I saw the jsinq.js, I found an error on line 105, in the &amp;#34;EqualityComparer.fromFunction&amp;#34;.&lt;br /&gt;For some reason, the code is &amp;#34;comparer.compare &amp;#61; func&amp;#59;&amp;#34; where I think it must be &amp;#34;comparer.equals &amp;#61; func&amp;#59;&amp;#34;&lt;br /&gt;With this change, the comparer do work.&lt;br /&gt;Comments: &lt;p&gt;Solved.&lt;/p&gt;</description><author>kaijaeger</author><pubDate>Wed, 04 Aug 2010 06:39:54 GMT</pubDate><guid isPermaLink="false">Closed Issue: EqualityComparer error [5326] 20100804063954A</guid></item><item><title>Commented Issue: EqualityComparer error [5326]</title><link>http://jsinq.codeplex.com/workitem/5326</link><description>I tryed to use distinct with equalityComparer without any luck.&lt;br /&gt;When I saw the jsinq.js, I found an error on line 105, in the &amp;#34;EqualityComparer.fromFunction&amp;#34;.&lt;br /&gt;For some reason, the code is &amp;#34;comparer.compare &amp;#61; func&amp;#59;&amp;#34; where I think it must be &amp;#34;comparer.equals &amp;#61; func&amp;#59;&amp;#34;&lt;br /&gt;With this change, the comparer do work.&lt;br /&gt;Comments: ** Comment from web user: kaijaeger ** &lt;p&gt;Thank you for reporting this&amp;#33; This has been resolved in JSINQ 1.0.0.2.&lt;/p&gt;</description><author>kaijaeger</author><pubDate>Wed, 04 Aug 2010 06:39:19 GMT</pubDate><guid isPermaLink="false">Commented Issue: EqualityComparer error [5326] 20100804063919A</guid></item><item><title>Updated Release: JSINQ 1.0.0.2 (Apr 04, 2010)</title><link>http://jsinq.codeplex.com/releases/view/43077</link><description>&lt;div class="wikidoc"&gt;Minor bugfixes with the Enumerable and Dictionary implementations.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>kaijaeger</author><pubDate>Wed, 04 Aug 2010 06:38:40 GMT</pubDate><guid isPermaLink="false">Updated Release: JSINQ 1.0.0.2 (Apr 04, 2010) 20100804063840A</guid></item><item><title>Released: JSINQ 1.0.0.2 (Apr 04, 2010)</title><link>http://jsinq.codeplex.com/releases/view/43077</link><description>&lt;div class=wikidoc&gt;Minor bugfixes with the Enumerable and Dictionary implementations.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;</description><author></author><pubDate>Wed, 04 Aug 2010 06:38:40 GMT</pubDate><guid isPermaLink="false">Released: JSINQ 1.0.0.2 (Apr 04, 2010) 20100804063840A</guid></item><item><title>Source code checked in, #51799</title><link>http://jsinq.codeplex.com/SourceControl/changeset/changes/51799</link><description>Work-item &amp;#35;5326</description><author>kaijaeger</author><pubDate>Wed, 04 Aug 2010 06:36:39 GMT</pubDate><guid isPermaLink="false">Source code checked in, #51799 20100804063639A</guid></item><item><title>Created Issue: EqualityComparer error [5326]</title><link>http://jsinq.codeplex.com/workitem/5326</link><description>I tryed to use distinct with equalityComparer without any luck.&lt;br /&gt;When I saw the jsinq.js, I found an error on line 105, in the &amp;#34;EqualityComparer.fromFunction&amp;#34;.&lt;br /&gt;For some reason, the code is &amp;#34;comparer.compare &amp;#61; func&amp;#59;&amp;#34; where I think it must be &amp;#34;comparer.equals &amp;#61; func&amp;#59;&amp;#34;&lt;br /&gt;With this change, the comparer do work.&lt;br /&gt;</description><author>ndaz5</author><pubDate>Tue, 03 Aug 2010 15:37:58 GMT</pubDate><guid isPermaLink="false">Created Issue: EqualityComparer error [5326] 20100803033758P</guid></item><item><title>Source code checked in, #49966</title><link>http://jsinq.codeplex.com/SourceControl/changeset/changes/49966</link><description>Checked in by server upgrade</description><author>_TFSSERVICE</author><pubDate>Mon, 19 Jul 2010 20:19:27 GMT</pubDate><guid isPermaLink="false">Source code checked in, #49966 20100719081927P</guid></item><item><title>New Post: If a field is null then Enumerable throws Exception</title><link>http://jsinq.codeplex.com/Thread/View.aspx?ThreadId=219600</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;If a field on an item within an Enumerable has a null field then when you come to enumerating the Enumerable it throws and InvalidOperationException with no real explanation of what is wrong. For example if the object is { id: 1, name: &amp;quot;James&amp;quot;, someField: null }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I was previously using the beta version and when I started to use the new version some of my application stopped working.&amp;nbsp; to get it to work I changed the null to false and it now works a treat.&amp;nbsp; Is this desired behaviour??&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;James&lt;/p&gt;&lt;/div&gt;</description><author>jwriley</author><pubDate>Thu, 15 Jul 2010 15:14:18 GMT</pubDate><guid isPermaLink="false">New Post: If a field is null then Enumerable throws Exception 20100715031418P</guid></item><item><title>Updated Wiki: Home</title><link>http://jsinq.codeplex.com/wikipage?version=19</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;JSINQ 1.0 out now!&lt;/h2&gt;JSINQ 1.0, the first &lt;b&gt;stable release&lt;/b&gt; of JSINQ is available for download right now! It is packed with new features such as
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Support for all .NET 3.5 query operators&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Experimental support for the &lt;b&gt;.NET 4.0 query operator &amp;quot;zip&amp;quot;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;100% lazy&lt;/b&gt; (uses deferred execution)&lt;/li&gt;
&lt;li&gt;Complete, fully tested &lt;b&gt;implementations of System.Collections.Generic.List&lt;/b&gt; and &lt;b&gt;System.Collections.Generic.Dictionary&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;toList, toDictionary and toLookup&lt;/b&gt; now available for jsinq.Enumerable&lt;/li&gt;
&lt;li&gt;Still &lt;b&gt;only 23 KB when minified&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://kaijaeger.com/downloads/jsinq/playground/" class="externalLink"&gt;Try it yourself online!&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;Get started with JSINQ&amp;#33;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsinq.codeplex.com/documentation?referringTitle=Home"&gt;Read the documentation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;What is JSINQ?&lt;/h2&gt;&lt;b&gt;JSINQ is the JavaScript library that allows you to write SQL-like queries against arrays and DOM node lists.&lt;/b&gt;&lt;br /&gt;JSINQ is a complete implementation of LINQ to Objects (the .NET 4.0 version) in JavaScript. What that means is that if you know LINQ and you know JavaScript, you know JSINQ. JSINQ is both an API-compatible implementation of System.Linq.Enumerable and a complete query-expression compiler. That&amp;#39;s right: &lt;i&gt;you can write LINQ-style queries in JavaScript&lt;/i&gt;. And if that isn&amp;#39;t enough: JSINQ is also very liberally licensed, well-document, well-tested (the Enumerable-part) and &lt;b&gt;a stable version has just been released&lt;/b&gt;. So give it a go!&lt;br /&gt;
&lt;h2&gt;What does it look like?&lt;/h2&gt;Let&amp;#39;s say you have a list of &lt;i&gt;customers&lt;/i&gt; and you want to assemble a list of your customers&amp;#39; lastnames, ordered by their frequency. With JSINQ, you can write something like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; result = 
    customers.groupBy(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(customer) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; customer.lastname; 
    }).
    select(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(g) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; {lastname: g.key, count: g.count()}; 
    }).
    orderByDescending(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(r) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; r.count; 
    }).
    select(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(r) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; r; 
    });
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This will do the job, but it&amp;#39;s also rather difficult to read. That&amp;#39;s why JSINQ also lets you write the following:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; query = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; jsinq.Query(&amp;#39;\
    from customer &lt;span style="color:Blue;"&gt;in&lt;/span&gt; $0 \
    group customer by customer.lastname into g \
    select {lastname: g.key, count: g.count()} \
    into r \
    orderby r.count descending \
    select r \
&amp;#39;);

query.setValue(0, customers);
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; result = query.execute();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Confused? What&amp;#39;s with all the backslashes?&lt;/b&gt; Please read: &lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;JSINQ in a nutshell&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;What can I do with JSINQ?&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Write arbitrarily complex queries against JavaScript arrays, DOM node lists or your own enumerable types&lt;/li&gt;
&lt;li&gt;Find elements in the HTML DOM tree using SQL-like queries&lt;/li&gt;
&lt;li&gt;Dynamically create HTML elements from JSON you have received via XMLHttpRequest in a declarative manner&lt;/li&gt;
&lt;li&gt;Tinker with XML and turn it into something else&lt;/li&gt;
&lt;li&gt;Combine it in interesting ways with the JavaScript-/Ajax-frameworks you are already using&lt;/li&gt;
&lt;li&gt;Write less code by exploiting the power of declarative programming&lt;/li&gt;
&lt;li&gt;And for the ambitious: write &lt;a href="http://blogs.msdn.com/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes-a-fully-linqified-raytracer.aspx" class="externalLink"&gt;raytracers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx" class="externalLink"&gt;monadic parser combinators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, etc.&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Using JSINQ&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;JSINQ in a nutshell&lt;/a&gt;&lt;/b&gt; (new to JSINQ?, read this!)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/documentation?referringTitle=Home"&gt;JSING Documentation&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=Frequently%20asked%20questions&amp;referringTitle=Home"&gt;Frequently asked questions&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Previous work&lt;/h2&gt;JSINQ isn&amp;#39;t the first attempt at implementing LINQ in JavaScript. There is also Chris Pietschmann&amp;#39;s &lt;a href="http://www.codeplex.com/JSLINQ" class="externalLink"&gt;LINQ to JavaScript&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (right here on CodePlex), there is &lt;a href="http://plugins.jquery.com/project/jLINQ" class="externalLink"&gt;jLINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and then there is &lt;a href="http://netindonesia.net/blogs/jimmy/archive/2007/07/16/Javascript-LINQ_3F003F003F00_.aspx" class="externalLink"&gt;this&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>kaijaeger</author><pubDate>Mon, 24 May 2010 09:06:37 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100524090637A</guid></item><item><title>Updated Wiki: Home</title><link>http://jsinq.codeplex.com/wikipage?version=18</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;JSINQ 1.0 out now!&lt;/h2&gt;JSINQ 1.0, the first &lt;b&gt;stable release&lt;/b&gt; of JSINQ is available for download right now! It is packed with new features such as
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Support for all .NET 3.5 query operators&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Experimental support for the &lt;b&gt;.NET 4.0 query operator &amp;quot;zip&amp;quot;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Complete, fully tested &lt;b&gt;implementations of System.Collections.Generic.List&lt;/b&gt; and &lt;b&gt;System.Collections.Generic.Dictionary&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;toList, toDictionary and toLookup&lt;/b&gt; now available for jsinq.Enumerable&lt;/li&gt;
&lt;li&gt;Still &lt;b&gt;only 23 KB when minified&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://kaijaeger.com/downloads/jsinq/playground/" class="externalLink"&gt;Try it yourself online!&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;Get started with JSINQ&amp;#33;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jsinq.codeplex.com/documentation?referringTitle=Home"&gt;Read the documentation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;What is JSINQ?&lt;/h2&gt;&lt;b&gt;JSINQ is the JavaScript library that allows you to write SQL-like queries against arrays and DOM node lists.&lt;/b&gt;&lt;br /&gt;JSINQ is a complete implementation of LINQ to Objects (the .NET 4.0 version) in JavaScript. What that means is that if you know LINQ and you know JavaScript, you know JSINQ. JSINQ is both an API-compatible implementation of System.Linq.Enumerable and a complete query-expression compiler. That&amp;#39;s right: &lt;i&gt;you can write LINQ-style queries in JavaScript&lt;/i&gt;. And if that isn&amp;#39;t enough: JSINQ is also very liberally licensed, well-document, well-tested (the Enumerable-part) and &lt;b&gt;a stable version has just been released&lt;/b&gt;. So give it a go!&lt;br /&gt;
&lt;h2&gt;What does it look like?&lt;/h2&gt;Let&amp;#39;s say you have a list of &lt;i&gt;customers&lt;/i&gt; and you want to assemble a list of your customers&amp;#39; lastnames, ordered by their frequency. With JSINQ, you can write something like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; result = 
    customers.groupBy(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(customer) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; customer.lastname; 
    }).
    select(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(g) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; {lastname: g.key, count: g.count()}; 
    }).
    orderByDescending(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(r) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; r.count; 
    }).
    select(&lt;span style="color:Blue;"&gt;function&lt;/span&gt;(r) { 
        &lt;span style="color:Blue;"&gt;return&lt;/span&gt; r; 
    });
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;This will do the job, but it&amp;#39;s also rather difficult to read. That&amp;#39;s why JSINQ also lets you write the following:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; query = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; jsinq.Query(&amp;#39;\
    from customer &lt;span style="color:Blue;"&gt;in&lt;/span&gt; $0 \
    group customer by customer.lastname into g \
    select {lastname: g.key, count: g.count()} \
    into r \
    orderby r.count descending \
    select r \
&amp;#39;);

query.setValue(0, customers);
&lt;span style="color:Blue;"&gt;var&lt;/span&gt; result = query.execute();
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Confused? What&amp;#39;s with all the backslashes?&lt;/b&gt; Please read: &lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;JSINQ in a nutshell&lt;/a&gt;.&lt;br /&gt;
&lt;h2&gt;What can I do with JSINQ?&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Write arbitrarily complex queries against JavaScript arrays, DOM node lists or your own enumerable types&lt;/li&gt;
&lt;li&gt;Find elements in the HTML DOM tree using SQL-like queries&lt;/li&gt;
&lt;li&gt;Dynamically create HTML elements from JSON you have received via XMLHttpRequest in a declarative manner&lt;/li&gt;
&lt;li&gt;Tinker with XML and turn it into something else&lt;/li&gt;
&lt;li&gt;Combine it in interesting ways with the JavaScript-/Ajax-frameworks you are already using&lt;/li&gt;
&lt;li&gt;Write less code by exploiting the power of declarative programming&lt;/li&gt;
&lt;li&gt;And for the ambitious: write &lt;a href="http://blogs.msdn.com/lukeh/archive/2007/10/01/taking-linq-to-objects-to-extremes-a-fully-linqified-raytracer.aspx" class="externalLink"&gt;raytracers&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx" class="externalLink"&gt;monadic parser combinators&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, etc.&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Using JSINQ&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=JSINQ%20in%20a%20nutshell&amp;referringTitle=Home"&gt;JSINQ in a nutshell&lt;/a&gt;&lt;/b&gt; (new to JSINQ?, read this!)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/documentation?referringTitle=Home"&gt;JSING Documentation&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://jsinq.codeplex.com/wikipage?title=Frequently%20asked%20questions&amp;referringTitle=Home"&gt;Frequently asked questions&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Previous work&lt;/h2&gt;JSINQ isn&amp;#39;t the first attempt at implementing LINQ in JavaScript. There is also Chris Pietschmann&amp;#39;s &lt;a href="http://www.codeplex.com/JSLINQ" class="externalLink"&gt;LINQ to JavaScript&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (right here on CodePlex), there is &lt;a href="http://plugins.jquery.com/project/jLINQ" class="externalLink"&gt;jLINQ&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and then there is &lt;a href="http://netindonesia.net/blogs/jimmy/archive/2007/07/16/Javascript-LINQ_3F003F003F00_.aspx" class="externalLink"&gt;this&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>kaijaeger</author><pubDate>Thu, 13 May 2010 09:41:26 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20100513094126A</guid></item><item><title>New Post: Is sum supposed to fail when empty?</title><link>http://jsinq.codeplex.com/Thread/View.aspx?ThreadId=208294</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;The new release works great!&lt;/p&gt;
&lt;p&gt;Thanks for the quick fix.&lt;/p&gt;&lt;/div&gt;</description><author>loraderon</author><pubDate>Tue, 06 Apr 2010 11:41:37 GMT</pubDate><guid isPermaLink="false">New Post: Is sum supposed to fail when empty? 20100406114137A</guid></item><item><title>New Post: Is sum supposed to fail when empty?</title><link>http://jsinq.codeplex.com/Thread/View.aspx?ThreadId=208294</link><description>&lt;div style="line-height: normal;"&gt;&lt;p&gt;Hi and thanks for reporting this issue,&lt;/p&gt;
&lt;p&gt;you're absolutely right that sum() should not throw when invoked on an empty enumerable (unlike average, min and max).&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Would you please download the new 1.0.0.1 release and let me know if this works for you?&lt;/p&gt;
&lt;p&gt;Thanks and cheers,&lt;/p&gt;
&lt;p&gt;Kai&lt;/p&gt;&lt;/div&gt;</description><author>kaijaeger</author><pubDate>Sun, 04 Apr 2010 17:31:50 GMT</pubDate><guid isPermaLink="false">New Post: Is sum supposed to fail when empty? 20100404053150P</guid></item><item><title>Created Release: JSINQ 1.0.0.1 (Apr 04, 2010)</title><link>http://jsinq.codeplex.com/releases?ReleaseId=43077</link><description>&lt;div class="wikidoc"&gt;Minor bugfixes with the Enumerable and Dictionary implementations.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>kaijaeger</author><pubDate>Sun, 04 Apr 2010 17:28:10 GMT</pubDate><guid isPermaLink="false">Created Release: JSINQ 1.0.0.1 (Apr 04, 2010) 20100404052810P</guid></item><item><title>Released: JSINQ 1.0.0.1 (Apr 04, 2010)</title><link>http://jsinq.codeplex.com/releases/view/43077</link><description>&lt;div&gt;Minor bugfixes with the Enumerable and Dictionary implementations.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;</description><author></author><pubDate>Sun, 04 Apr 2010 17:28:10 GMT</pubDate><guid isPermaLink="false">Released: JSINQ 1.0.0.1 (Apr 04, 2010) 20100404052810P</guid></item></channel></rss>