现在尝试通过将一些旧的Linq-querys转换为LinqJs查询来尝试学习LinQJS。
这是Linq查询。
(from y in class1
join x in class2 on y.Id equals x.Name
group y by new { y.Date, x.Number } into xy
select new class3()
{
}).ToList();
这是我目前的尝试(谁被重写了很多次)。我想我真的不懂语法。
var example = Enumerable.from(this.class1)
.join(
this.class2,
"y => y.Id",
"x => x.Name",
" "
)
.groupBy("x.Date", "y.Number")
.select(xy= new Class3(), { })
.ToArray();
答案 0 :(得分:0)
嗯,你可以做这样的事情
首先,加入部分。
var res = Enumerable.From(class1)
.Join(
class2,
"x => x.Id",
"y => y.Name",
//I flattened all to make things more readable, you could also choose (x, y) => {c1:x, c2:y} for example
"(x, y) => {dte:x.Date, id:x.Id, name:y.Name, nb:y.Number, val:y.val} "
).ToArray();
然后按部分分组(你当然可以一起完成)
var res2 = Enumerable.From(res)
.GroupBy("p => {Date:p.dte, Number:p.nb}",
"p=> p",
//that's the "select" part, so put what you need in it
"(p, grouping) => {key: p, values: grouping.source}")
.ToArray();
然后你可以选择你需要的东西。
可悲的是,似乎(或者我没有做到这一点)多个字段的组不能正常工作(它会返回多个记录)。
虽然.GroupBy("p => p.dte}",
按预期工作。
答案 1 :(得分:0)
首先,了解使用方法调用语法转换为查询语法时linq查询的内容非常重要。
(from y in class1
join x in class2 on y.Id equals x.Name
group y by new { y.Date, x.Number } into xy
select new class3()
{
}).ToList();
C#等价物:
class1.Join(class2, y => y.Id, x => x.Name, (y, x) => new { y, x })
.GroupBy(z => new { z.y.Date, z.x.Number })
.Select(xy => new class3())
.ToList();
然后应该简单地转换为Linq.js等价物。
var query =
class1.Join(class2, "$.Id", "$.Name", "{ y: $, x: $$ }")
.GroupBy(
"{ Date: $.y.Date, Number: $.x.Number }",
null,
null,
"$.Date + ' ' + $.Number"
)
.Select("new class3()")
.ToArray();
请注意,由于我们使用对象作为键,因此我们必须提供比较选择器。