使用(Linq for JavaScript库)子查询(操作方法)

时间:2010-03-31 01:12:06

标签: linq javascript

我正在使用此库:jsinq

我想使用子查询创建一个新对象。例如,在.NET LINQ中,我可以这样做:

from a in Attendances
where a.SomeProperty = SomeValue
select new {
    .Property1 = a.Property1,
    .Property2 = a.Property2,
    .Property3 = (from p in People
                  where p.SomeProperty = a.Property3
                  select p)
}

这样我得到一个所有人的列表,其中Property3值与列表中返回的EACH对象中出勤的Property3值相匹配。

我在文档或playground上没有看到任何此类示例。做了几次尝试,并没有任何运气。

有人知道这是否可行以及如何进行?

1 个答案:

答案 0 :(得分:2)

在寻找LINQ-JavaScript库时,我也开始使用jslinq。但是我决定切换到linq.js,我发现它更接近.NET样式LINQ。

http://linqjs.codeplex.com

http://neue.cc/reference.htm

linq.js库的一个最好的部分是它包含一个类似于lambda语法的C#,你可以将子查询放在这些lambda中。

例如,以他们发布的以下linq.js查询为例。

Enumerable.Range(0, 20)
.Where("$ % 3 == 0")
.Select("value, index => {index:index, value:value * 10}")
.WriteLine("$.index + ':' + $.value")

使用输出进行评估:

0:0
1:30
2:60
3:90
4:120
5:150
6:180

现在是子查询的示例:

Enumerable.Range(0, 20)
.Where("$ % 3 == 0")
.Select("value, index => {index:index, value:Enumerable.Range(0, 20).Where(\"$ % 3 == 0\").ToArray()}")
.WriteLine("$.index + ':' + $.value") 

返回:

0:0,3,6,9,12,15,18
1:0,3,6,9,12,15,18
2:0,3,6,9,12,15,18
3:0,3,6,9,12,15,18
4:0,3,6,9,12,15,18
5:0,3,6,9,12,15,18
6:0,3,6,9,12,15,18

这是一个简单的例子,但它确实表明使用linq.js可以进行子查询。