2016-05-24 3 views
1

Я пытаюсь сгруппировать 7 объектов (типа ABPM) по дате и часу и не получить правильные результаты.Linq - группа по нескольким столбцам не работает, синтаксис lambda

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}) 

Но этот (без лямбда) выводит только 2 группу, которая является правильным

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

Что это правильный способ написать лямбда-запрос? Благодаря

ответ

2

Вы должны сделать свой анонимный тип использования Key свойства, так что они участвуют в вычислениях равенства:

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

От MSDN:

Основные свойства отличаются от неключевых свойств в нескольких основные направления:

  • Сравниваются только значения ключевых свойств в чтобы определить, равны ли два экземпляра.
  • Значения свойств ключа доступны только для чтения и не могут быть изменены.
  • Только ключевые значения свойств включены в алгоритм хеш-кода, генерируемого компилятором, для анонимного типа.

Обратите внимание, что в C#, все свойства анонимных типов имеют ту же семантику, ключевые свойства в VB.

+0

Это работает, отлично. – vabii

Смежные вопросы