为什么按匿名对象的键分组不按预期方式运行?

我有一个这个formart的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 _ } _ ) 

我期望分组结果计数为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部分意味着属性是匿名类型的关键。 有关更多详细信息,请参阅VB匿名类型MSDN页面 。