JSINQ——LINQ 的 JavaScript 实现

阅读数:1381 2009 年 2 月 11 日

话题:.NETJavaScript语言 & 开发

JSINQ代表 JavaScript INtegrated Query,它是用 JavaScript 实现 LINQ to Objects 的 beta 项目,最近由 Kai Jäger 在 CodePlex 网站上发布。JSINQ 包含两个模块,Enumerable 和 Query 相应地实现System.Linq.EnumerableSystem.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。

查看英文原文:JSINQ, a JavaScript Implementation of LINQ