【问题标题】:How to count: Datatable.rows.count excluding deleted rows如何计数:Datatable.rows.count 不包括已删除的行
【发布时间】:2016-11-27 09:19:29
【问题描述】:

我一直这样做是为了避免从我的数据集中删除/删除行。

For Each drX As DataRow In myDataset.Tables("CustInno").Rows
    If drX.RowState <> DataRowState.Deleted Then
        iRunRows += 1
    End If
Next

有没有更快或更好的方法来做到这一点?

【问题讨论】:

    标签: vb.net dataset datarow


    【解决方案1】:

    “更好”是一个主观术语。至于“更快”,无论如何,必须循环并检查RowState。要做的一件事是将你的循环放在一个函数中,这样你至少不会重复代码,并且可以在任何表上使用它:

    Private Function ActiveRows(dt As DataTable) As Int32
        ... your loop
        Resturn iRunRows 
    End Function
    

    或者你可以使用扩展方法:

    Dim activeRowCount = dt.AsEnumerable.
            Count(Function(q) q.RowState <> DataRowState.Deleted).
    

    它不可能更快 - 某处必须循环 - 但它更短。

    【讨论】:

    • @IvanPerez 如果这回答了问题,请单击复选标记,以便将其移出未回答列表,如果有帮助,请单击向上箭头。接受答案和投票有助于其他用户找到好的答案。
    【解决方案2】:

    DataTable类提供了各种方法来获取基于DataRow.State的行集。

    'DataTable.Select` Method也许是最简单的。

    dt.Select("", "", DataViewRowState.CurrentRows)

    另一个是使用DataView并设置它RowStateFilter属性。此示例修改DataTable.DefaultViewpryore,然后在创建独立DataView实例上。

    Dim dt As New DataTable
    
    dt.Columns.Add("c1")
    For i As Int32 = 1 To 100
        dt.Rows.Add(i)
    Next
    dt.AcceptChanges()
    Debug.Print(dt.Rows.Count.ToString()) ' prints 100
    
    For i As Int32 = 99 To 0 Step -2
        dt.Rows.Item(i).Delete()
    Next
    Debug.Print(dt.Rows.Count.ToString()) ' prints 100
    
    dt.DefaultView.RowStateFilter = DataViewRowState.CurrentRows
    Dim count As Int32 = dt.DefaultView.Count
    Debug.Print(count.ToString())   ' prints 50
    
    ' loop thru DataView rows
    For Each drv As DataRowView In dt.DefaultView
        Dim dr As DataRow = drv.Row
        Debug.Print(dr.Item(0).ToString())
    Next
    

    这些方法是否优于循环解决方案是观察者部分上的主观呼叫。

    【讨论】:

    • 谢谢您的信息,我从未尝试只需选择Currentrows。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多