【问题标题】:Selecting distinct DataTable rows选择不同的 DataTable 行
【发布时间】:2017-01-10 10:46:28
【问题描述】:

在我的 vb.net 项目中,我有这个表格,用于向订单添加额外费用(例如,送货费用)。

在本例中,运费编号是相同的,因为运费是针对整个订单的,而不是每行都有运费。但是,可以选择为每个单独的订单行添加不同的运费值,因此数字会不同(例如,7 和 8),每行的值也会不同。

按下“添加”按钮时,行或订单(取决于添加运费的方式)将添加到标有“运费”的网格中。但是,数据只存储在DataTable 中,然后将其传递给 Order Save 函数,从中将行复制到数据库中,然后从DataTable 中删除。

现在,请注意标记为“Total Freight”的textbox...这目前正在遍历DataTable 的每一行并将所有总计加在一起。运费全不一样的情况下是可以的,但是如果是按订单添加的,有2行,如上,应该是15,而不是现在显示的30。

那么,有没有一种方法可以让它只迭代具有不同 Freight # 值的行,这样它就不会两次添加相同的行值?我不认为SQL SELECT DISTINCT 可以在这里工作,因为它只是DataTable

这很难解释,但希望这是有道理的,但如果不是很抱歉!

编辑

总额计算代码(freightTable是我的DataTable

If freightTable.Rows.Count = 0 Then
            txtTotal.Text = "0.00"
        Else
            Dim tot As Double = 0
            Dim i As Integer = 0
            For i = 0 To freightTable.Rows.Count - 1
                tot = tot + Convert.ToDouble(ugFreight.Rows(i).Cells("Freight_Val").Value)
            Next i
            txtTotal.Text = tot
        End If

【问题讨论】:

标签: sql vb.net datatable iteration


【解决方案1】:

记下您在列表中显示的运费值。

        Dim freightDone As New List(Of Integer)
        For i = 0 To freightTable.Rows.Count - 1
            Dim currentFreigth as Integer = Convert.ToInteger( ugFreight.Rows(i).Cells("Freight_#").Value )
            If Not freightDone.Contains(currentFreigth) Then
                tot = tot + Convert.ToDouble(ugFreight.Rows(i).Cells("Freight_Val").Value)
                freightDone.Add(currentFreigth)
            End If
        Next i

(您可能必须更改 currentFreigth 的定义以适合您的数据表列名称,或者我的 VB 有点生疏。)

【讨论】:

    【解决方案2】:

    您可以通过这种方式使用 linq 从列中选择不同的值:

    Dim Values = table.AsEnumerable().Select(Function(x) x.Field(Of int)("SomeColumn")) _
                      .Distinct().ToList()
    

    【讨论】:

    • 是的,我知道,请保持接受该答案:) 但是您不喜欢学习其他/更好的选择吗?
    • 你见过AsEnumerable()吗?或Field(of T)("ColumnName")?
    • @David 一个复选标记仅表示该答案适用于 OP,仅此而已。 SO 充斥着 QA 帖子,其中接受的答案获得的支持最少(实际上不是最佳解决方案)。添加一个好的/更好的答案也永远不会太晚 - 我有一个答案是在 Q 发布 3 年后发布的。
    【解决方案3】:

    在查询的where子句中添加条件:

    where freight IN (select distinct freight from 'table_name')
    

    【讨论】:

    • 嗨,在上面添加了我当前的代码。如您所见,没有查询。还记得它使用 DataTable,所以不确定 SQL 是否可行?
    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 2020-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2013-11-07
    • 2013-07-02
    相关资源
    最近更新 更多