Vb.net Linq-按多列分组不工作,lambda语法

Vb.net Linq-按多列分组不工作,lambda语法,vb.net,linq,Vb.net,Linq,我试图按日期和时间将7个对象(ABPM类型)分组,但没有得到正确的结果 Private Class ABPM Public DT As Date = Date.Now Public Hour As Integer = 0 Public Minute As Integer = 0 Public SBP As Integer = 0 Public DBP As Integer = 0 End Class Dim abpms As New List(Of AB

我试图按日期和时间将7个对象(ABPM类型)分组,但没有得到正确的结果

Private Class ABPM
    Public DT As Date = Date.Now
    Public Hour As Integer = 0
    Public Minute As Integer = 0
    Public SBP As Integer = 0
    Public DBP As Integer = 0
End Class

Dim abpms As New List(Of ABPM)

以下查询生成7个组,而不是2个组

Dim hourlyDayGroup2 = abpms.GroupBy(Function(a As ABPM) New With {a.DT, a.Hour})
但是这个(没有lambda)只输出2组,这是正确的

Dim hourlyDayGroup = From a As ABPM In abpms _
                         Group By a.DT, a.Hour Into Group

编写lambda查询的正确方法是什么?谢谢

您需要让匿名类型使用
属性,以便它们参与相等计算:

Dim hourlyDayGroup2 = abpms.GroupBy(Function(a As ABPM) New With {Key a.DT, Key a.Hour})
发件人:

键属性与非键属性在几个基本方面有所不同:

  • 仅比较键属性的值,以确定两个实例是否相等
  • 键属性的值是只读的,不能更改
  • 对于匿名类型,编译器生成的哈希代码算法中只包含键属性值
注意,在C#中,匿名类型的所有属性与VB中的键属性具有相同的语义