我正在尝试按日期和小时对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查询的正确方法是什么?感谢
答案 0 :(得分:4)
您需要使您的匿名类型使用Key
属性,以便它们参与相等计算:
Dim hourlyDayGroup2 = abpms.GroupBy(Function(a As ABPM) New With {Key a.DT, Key a.Hour})
来自MSDN:
关键属性在几个基本方面与非关键属性不同:
- 仅比较键属性的值以确定两个实例是否相等。
- 关键属性的值是只读的,无法更改。
- 对于匿名类型,编译器生成的哈希码算法中仅包含键属性值。
请注意,在C#中,匿名类型的所有属性与VB中的键属性具有相同的语义。