从DataRow列表中删除一行

时间:2014-11-20 16:27:48

标签: vb.net datarow

我正在使用Dictionary创建DataRow列表的键。我想迭代每个键并删除列表中的行。当我明确尝试删除行时,这将抛出超出范围的异常。我怎样才能改变我的代码来实现这个目标?

For Each g As KeyValuePair(Of [String], List(Of DataRow)) In grouped

   For Each row As DataRow In g.Value

         If CInt(segment(1)) <= 4 Then
             'THIS THROWS AN OUT OF RANGE EXCEPTION
             g.Value.Remove(row)
         End If  
   Next
Next

我只想根据条件删除特定行。有人可以发一个例子吗?我在一个旧的浏览器上&#34;添加评论&#34;功能不起作用

您能否展示一个代码示例,说明如何使用基于row.Item(&#34; ID&#34;)的谓词和RemoveAll函数?

我试过这个并且得到了一个异常

 g.Value.RemoveAll(Function(l) l.Item(Con.ID) Is l.Item(Con.ID).ToString)

2 个答案:

答案 0 :(得分:3)

使用List.RemoveAll。这不仅会使删除所有项目的行为比尝试删除某种形式的循环结构中的项目更容易,但它会显着提高效率,因为List可以在最后重新组织所有项目而不是一遍又一遍地将项目向下移动一个索引。

答案 1 :(得分:0)

我使用反向For循环来计算它。我没有看到如何使用RemoveAll的示例。如果你有时间,请发一个例子

                For i As Integer = g.Value.Count - 1 To 0 Step -1
                            Dim row As DataRow = CType(g.Value(i), DataRow)

                            Dim segment() As String = row.Item(c._ID).ToString.Split("-"c)

                            If CInt(segment(1)) <= 4 Then
                                g.Value.Remove(row)
                            End If
                        Next i