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

时间:2009-03-09 16:14:21

标签: c# .net vb.net linq anonymous-class

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

我预计groupsResults数量为4而不是显示的5 基本上它不会将第1和第5行分组为一组。

我期望具有相同值的对象将产生相同的键。

它可能是什么原因?

1 个答案:

答案 0 :(得分:4)

使匿名类型属性不可变 - 这是获得相等和散列的方法。 (在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 anonymous types MSDN page