1

この形式の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 のカウントが 5 ではなく 4 になると予想していました。
基本的に1行目と5行目を1つのグループにまとめることはありません。

同じ値のオブジェクトが同じキーを生成することを期待していました。

その理由は何ですか?

4

1 に答える 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部分は、プロパティが匿名型のキーであることを意味します。詳細については、VB 匿名型の MSDN ページを参照してください。

于 2009-03-09T16:20:32.740 に答える