Perché raggruppare per chiave di oggetti anonimi non si comporta come previsto?
-
06-07-2019 - |
Domanda
Ho un file CSV di questo formato
A,B,value
a1,b1,10
a2,b1,12
a2,b1,15
a2,b2,14
a1,b1,12
che sto convertendo come datatable nella mia applicazione.
Dim enumerable = _dt.AsEnumerable
Dim groupedResults = enumerable.GroupBy( _
Function(x) _
New With { _
.A = x.Item("A").ToString, _
.B = x.Item("B").ToString _
} _
)
Mi aspettavo che i risultati raggruppati contassero 4 anziché i 5 che mostrano.
Fondamentalmente non si raggruppa per la 1a e 5a fila in un gruppo.
Mi aspettavo che l'oggetto con lo stesso valore producesse la stessa chiave.
Quale può essere la ragione?
Soluzione
Rendi immutabili le proprietà del tipo anonimo: questo è il modo per far funzionare l'uguaglianza e l'hashing. (In C # tutti i tipi anonimi sono immutabili per impostazione predefinita.)
Prova questo
Dim enumerable = _dt.AsEnumerable
Dim groupedResults = enumerable.GroupBy( _
Function(x) _
New With { _
Key .A = x.Item("A").ToString, _
Key .B = x.Item("B").ToString _
} _
)
EDIT: la parte Key
indica che la proprietà è una chiave per il tipo anonimo. Vedi la pagina MSDN di tipi anonimi VB per maggiori dettagli.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow