JSINQ代表JavaScript INtegrated Query,它是用JavaScript实现LINQ to Objects的beta项目,最近由Kai Jäger在CodePlex网站上发布。JSINQ包含两个模块,Enumerable和Query相应地实现System.Linq.Enumerable 和System.Linq.Queryable ,它可枚举字符串、DOM节点类别或者其他对象。
两个模块分别是jsinq.Enumerable和jsinq.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();
枚举示例,如下所示:
var enumerator = namesThatStartWithAnA.getEnumerator(); while (enumerator.moveNext()) { var name = enumerator.current(); document.write(name + '<br />'); }
根据Kai的说法,JSINQ可以完成下列任务:
- 针对JavaScript字符串、DOM节点列表或者自定义枚举类型,编写任意复杂的查询
- 在HTML的DOM树中使用SQL风格的查询语法找出相应的元素
- 从藉由XMLHttpRequest获取而来的JSON中以声明的方式动态创建HTML元素
- 修改XML并把它转换为其他格式
- 把正使用的JavaScript或Ajax框架以有趣的方式关联
- 利用声明性编程的好处来减少编码量
- 以及让喜欢挑战的编程人员编写射线追踪器(算法)、包含多个单一解析器的组合器等
Kai已经提供了相关网页让大家测试JSINQ 。可以从CodePlex免费下载基于MIT许可证的源代码。类似的项目还有:JSLINQ 和JLINQ。