¿Por qué agrupar por clave de objetos anónimos no se comporta de la manera esperada?
-
06-07-2019 - |
Pregunta
Tengo un archivo csv de este formart
A,B,value
a1,b1,10
a2,b1,12
a2,b1,15
a2,b2,14
a1,b1,12
que estoy convirtiendo como tabla de datos en mi aplicación.
Dim enumerable = _dt.AsEnumerable
Dim groupedResults = enumerable.GroupBy( _
Function(x) _
New With { _
.A = x.Item("A").ToString, _
.B = x.Item("B").ToString _
} _
)
Esperaba que los resultados agrupados cuenten hasta 4 en lugar de los 5 que se muestran.
Básicamente no se agrupa por primera y quinta fila en un solo grupo.
Esperaba que el objeto con el mismo valor produjera la misma clave.
¿Cuál puede ser el motivo?
Solución
Convierta las propiedades de tipo anónimo en inmutables: esa es la forma de lograr que la igualdad y el hash funcionen. (En C # todos los tipos anónimos son inmutables de forma predeterminada).
Prueba esto
Dim enumerable = _dt.AsEnumerable
Dim groupedResults = enumerable.GroupBy( _
Function(x) _
New With { _
Key .A = x.Item("A").ToString, _
Key .B = x.Item("B").ToString _
} _
)
EDITAR: la parte Key
significa que la propiedad es una clave para el tipo anónimo. Consulte la página de MSB de tipos anónimos VB para obtener más detalles.