如何使用vb.net linq to对象通过匿名类型分组

如何使用vb.net linq to对象通过匿名类型分组,vb.net,linq,c#-to-vb.net,Vb.net,Linq,C# To Vb.net,我正试图在vb.net中编写一个linq到对象查询,下面是我试图实现的c#版本(我在linqpad中运行这个): void Main() { var items=GetArray( 新的{a=“a”,b=“a”,c=1} ,新的{a=“a”,b=“a”,c=2} ,新的{a=“a”,b=“b”,c=1} ); ( 从i到项目 i组由新的{i.a,i.b}变成g 设p=new{k=g,v=g.Sum((i)=>i.c)} 其中p.v>1 选择p ).Dump(); } //由于vb.net不支持匿

我正试图在vb.net中编写一个linq到对象查询,下面是我试图实现的c#版本(我在linqpad中运行这个):

void Main()
{
var items=GetArray(
新的{a=“a”,b=“a”,c=1}
,新的{a=“a”,b=“a”,c=2}
,新的{a=“a”,b=“b”,c=1}
);
(
从i到项目
i组由新的{i.a,i.b}变成g
设p=new{k=g,v=g.Sum((i)=>i.c)}
其中p.v>1
选择p
).Dump();
}
//由于vb.net不支持匿名类型数组初始值设定项,因此可以简化转换
T[]GetArray(参数T[]值){
返回值;
}
我在group by语法方面遇到了困难,这两种语法都不相同(vb在某些地方需要'identifier=expression',以及带'expression required'的求和函子)


非常感谢你的帮助

您可以在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

可以在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