基于两个参数

时间:2017-03-20 09:00:47

标签: .net vb.net linq

我有一个对象列表,其中包含两个参数param1param2,由此类定义:

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

感谢您的帮助,

2 个答案:

答案 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