Linq - 由多列不起作用的组,lambda语法

时间:2016-05-24 16:08:21

标签: 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 ABPM)

The data in the list is here

以下查询生成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查询的正确方法是什么?感谢

1 个答案:

答案 0 :(得分:4)

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

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

来自MSDN

  

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

     
      
  • 仅比较键属性的值以确定两个实例是否相等。
  •   
  • 关键属性的值是只读的,无法更改。
  •   
  • 对于匿名类型,编译器生成的哈希码算法中仅包含键属性值。
  •   

请注意,在C#中,匿名类型的所有属性与VB中的键属性具有相同的语义。