我正在尝试在vb.net中编写一个linq到对象查询,这是我想要实现的c#版本(我在linqpad中运行它):
void Main()
{
var items = GetArray(
new {a="a",b="a",c=1}
, new {a="a",b="a",c=2}
, new {a="a",b="b",c=1}
);
(
from i in items
group i by new {i.a, i.b} into g
let p = new{ k = g, v = g.Sum((i)=>i.c)}
where p.v > 1
select p
).Dump();
}
// because vb.net doesn't support anonymous type array initializer, it will ease the translation
T[] GetArray<T>(params T[] values){
return values;
}
我很难使用不同的语法组(在某些地方需要'identifier = expression',以及需要'表达式'的求和算子)
非常感谢你的帮助!
答案 0 :(得分:5)
您可以在VB.NET中创建一个Object类型的数组,该数组可以包含任何类型的对象,包括匿名类型。如果您保持相同的字段名称,类型和字段顺序,编译器将正确地推断出要使用相同的匿名类型。 我在LinqPad中运行此代码以获得您正在寻找的结果
Dim items As Object() = { _
New With {.a="a",.b="a",.c=1}, _
New With {.a="a",.b="a",.c=2}, _
New With {.a="a",.b="b",.c=1} _
}
Dim myQuery = From i In items _
Group By i.a, i.b into g = Group _
let p = New With { .k = g, .v = g.Sum(Function(i) i.c)} _
where p.v > 1 _
select p
myQuery.Dump