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?

È stato utile?

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
scroll top