使用两个数据表,按 ID 和计数分组,然后减去,然后更新行

问题描述

我将 Visual Studio 与 vb.net、asp.net 和 webforms 结合使用。

我填充两个数据表并将一些值放入两个复选框列表(填充可用复选框列表和填充活动复选框列表)。一切都很好。

这就是我被卡住并需要帮助的地方。

第一步:在可用中,我有一个名为 ID 的列。 ID 值是唯一的,如 1、2、3、4 等。在 Active 中,我有与它们对应的 ID,但可以有多个,例如 1、1、2、3、1、4 等。所以我需要做的是计算每个 ID 中有多少处于活动状态。例如,在 1,1,2,3,4 中有三个 1,一个 2,一个 3,一个 4。我该怎么做?

第二步:做完之后,我需要做减法。我需要查看 MaxAccount 是什么(例如 5)并从步骤 1 中减去它。例如,如果 MaxAccount 是 5 并且我有三个 1,那么 5 - 3 = 2。

第三步:我需要使用第 2 步中的值更新 AccountTotal。

您可以在 UpdateAccountTotal() 中看到我尝试对此进行编码的尝试,但只是卡住了。

更新 AccountTotal

Private Function UpdateAccountTotal() As DataTable
    Dim dtDefaultAvailable As New DataTable
    dtDefaultAvailable = ViewState("vsDefaultAvailable")

    Dim dtDefaultActive As New DataTable
    dtDefaultActive = ViewState("vsDefaultActive")

    Dim dtDefaultAmount As New DataTable
    ViewState("vsDefaultAmounts") = dtDefaultAmount

    For Each rowAvailable In dtDefaultAvailable.Rows
        Dim maxAccount = rowAvailable("MaxAccount").ToString()

        'For Each rowActive In dtDefaultActive.Rows
        'Dim ID = rowAvailable("ID").ToString()
        'Dim countID = ID.Count

    Next
End Function

解决方法

我可能不会这样做,但是:

For Each rowAvailable as DataRow In dtDefaultAvailable.Rows
    Dim maxAccount = DirectCast(rowAvailable("MaxAccount"),Integer) 'it's an int,right?

    'step 2 and 3
    rowAvailable("AccountTotal") = maxAccount - dtDefaultActive.Rows.Cast(Of DataRow).Count(Function(r) r("ID").Equals(rowAvailable("ID")))

Next

至于我会怎么做:

  • 创建数据集类型文件
  • 在可视化设计器中创建一个可用的数据表和一个活动的数据表
  • 创建一个 DataRelation,其中 Active 是 Available 的子级(Available ID 是 PK,Active.AvailableId 是 FK)
  • 在可用表达式中创建一列 [MaxAccount] - COUNT(Child.Id)

enter image description here

在视觉上设计的强类型数据表更适合在代码中使用。如果您的数据表是强类型的,代码将如下所示:

For Each rowAvailable In dtDefaultAvailable
    
    'step 2 and 3
    rowAvailable.AccountTotal = rowAvailable.MaxAccount - dtDefaultActive.Count(Function(r) r.ID = rowAvailable.ID)

Next

当一切都不是对象,通过字符串访问并需要转换时,就不那么混乱了..并且智能感知工作..

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...