JSINQ significa JavaScript INtegrated Query, um projeto beta que implementa LINQ to Objects em JavaScript e que foi recentemente liberado no CodePlex pelo Kai Jäger. JSINQ contém 2 módulo, Enumerable e implementação de Query, System.Linq.Enumerable e System.Linq.Queryable respectivamente, permitindo enumerar arrays, listas de nós DOM ou outros objetos.
O dois módulos são jsinq.Enumerable e jsinq.Query. Um exemplo de uma query é:
var query = new jsinq.Query('\ from order in $1 \ group order by order.customerId into g \ select {customerId: g.getKey(), items: g.sum(function(g) { return g.items; })} \ into h \ join customer in $0 on h.customerId equals customer.id \ where h.items > 10 \ orderby h.items descending \ select {lastname: customer.lastname, items: h.items} \ '); query.setValue(0, customers); query.setValue(1, orders); var result = query.execute();
An example of enumerating is:
var enumerator = namesThatStartWithAnA.getEnumerator(); while (enumerator.moveNext()) { var name = enumerator.current(); document.write(name + '<br />'); }
De acordo com Kai, JSINQ pode:
- Escrever queries arbitráriamente complexas baseadas em arrays JAvaScript, listas de nós DOM ou seus próprios objetos enumeráveis
- Encontrar Elementos na árvore DOM do HTML usando queries SQL
- Criar HTML dinamicamente a partir de respostas JSON que você receba via XMLHttpRequest de forma declarativa
- Manipular XML e convertê-lo para algo
- Combinar de forma interessante com os frameworks Ajax/JavaScript que você já usa
- Escrever menos código através da exploração da força da programação declarativa
- e para os ambiciosos: escrever raytracers, monadic parser combinators, etc.
Kai disponibilizou uma página de playground que permite a qualquer um testar o JSINQ. O código fonte pode ser baixado gratuitamente do CodePlex sob a MIT License. Outro projetos similares: JSLINQ e JLINQ.