Почему группировка по ключу анонимных объектов не ведет себя ожидаемым образом?

StackOverflow https://stackoverflow.com/questions/626935

Вопрос

У меня есть CSV-файл этого формата

 A,B,value
 a1,b1,10
 a2,b1,12
 a2,b1,15
 a2,b2,14
 a1,b1,12

который я преобразовываю в приложение в виде данных.

 Dim enumerable = _dt.AsEnumerable

 Dim groupedResults = enumerable.GroupBy( _
                                   Function(x) _
                                        New With { _
                                                  .A = x.Item("A").ToString, _
                                                  .B = x.Item("B").ToString _
                                                 } _
                                        )

Я ожидал, что значение groupedResults равно 4 вместо 5, который показывает.
В основном он не группируется по 1-му и 5-му ряду в одну группу.

Я ожидал, что объект с тем же значением будет производить тот же ключ.

Что может быть причиной этого?

Это было полезно?

Решение

Сделайте свойства анонимного типа неизменяемыми - это способ добиться равенства и хэширования. (В C # все анонимные типы являются неизменяемыми по умолчанию.)

Попробуйте это

 Dim enumerable = _dt.AsEnumerable

 Dim groupedResults = enumerable.GroupBy( _
               Function(x) _
                    New With { _
                              Key .A = x.Item("A").ToString, _
                              Key .B = x.Item("B").ToString _
                             } _
                    )

РЕДАКТИРОВАТЬ: часть Key означает, что свойство является ключом для анонимного типа. См. страницу MSDN анонимных типов VB для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top