我有一个对象列表,其中包含两个参数param1
和param2
,由此类定义:
Class test
public name
Public param1
Public param2
End Class
目的是将所有对象分组为param1和param2,以便进一步处理。
我尝试使用LINQ和groupBy功能,尽管我付出了最大的努力,但我无法使其工作。
为了清晰起见,我将我的作品复制在一个小提琴中:https://dotnetfiddle.net/n19PRv
预期输出为:
num0 (-> num1 is in the same group, it is not displayed)
num2
num3
num4
感谢您的帮助,
答案 0 :(得分:2)
可比较anonymous types的正确语法是
New With { Key .param1 = c.param1, Key .param2 = c.param2 }
其中Key
添加到所有要比较的属性的前面。使用Tuple
:
For Each myGroup In list.ToLookup(Function(c) Tuple.Create(c.param1, c.param2))
(GroupBy
使用LookUp
获取群组)
答案 1 :(得分:0)
使用VB.NET时,您需要告诉编译器在比较相等时使用匿名类型的哪些属性:
Key关键字使您可以指定匿名类型属性的行为。只有您指定为关键属性的属性才会参与匿名类型实例之间的相等性测试或哈希码值的计算。无法更改关键属性的值。
有关详细信息,请参阅此link。
为了使您的示例正常工作,您只需要在匿名类型的属性前面添加Key
关键字:
From c In list Group c _
By Key = New With { Key c.param1, Key c.param2} Into Group select group