【问题标题】:compute datatable with many filters使用许多过滤器计算数据表
【发布时间】:2021-01-13 16:39:22
【问题描述】:

具有 3 列的数据表(数量 - SOP_Type - Item_Number) 我想计算编号为“309-032-SHU”且 SOP_Type = 3 的项目的列 Quantity 总和 我尝试了这段代码,但没有工作

Dim b As String
b = "309-032-SHU"
dim c as integer
c = 3
       
DGV1.Rows(0).Cells(0).Value = NAJRNDataSet.vwSalesLineItems.Compute("SUM(Quantity)", "Item_Number = " & b & " ", "SOP_Type = " & c & " ")
        

【问题讨论】:

  • 过滤器只是一个布尔表达式。您通常如何将多个布尔条件组合成一个复合语句?如果您不知道这一点,请停下手头的工作,对布尔逻辑进行一些研究,因为如果不了解这一点,您将无法真正进行编程。
  • 事实上,该方法的文档甚至提供了一个示例。不要在没有阅读相关文档的情况下在这里提问。您所要做的就是单击方法名称并按 F1 键。上下文相关的帮助在 Windows 中已经存在了几十年,因此您实际上不需要编程经验。
  • 感谢您的建议,我将对布尔逻辑进行一些研究,如果您可以编辑我的代码,我将不胜感激,我需要您对如何开始学习 Visual Basic 编程提出建议
  • 这里有一个你可以开始的教程:VbTutorial 和这里:VB.NET Tutorial and source code。祝你好运。

标签: vb.net datatable


【解决方案1】:

由于 DataTable 类没有实现 IEnumerable,它提供了一个扩展方法来获取可枚举。 (.AsEnumerable) 然后我们可以使用 linq 语法来获取 Sum。

Private Sub OpCode()
    Dim dt As New DataTable
    'Fill the datatable
    Dim b = "309-032-SHU"
    Dim c = 3
    Dim Total As Integer
    Total = (From r As DataRow In dt.AsEnumerable
             Where r.Field(Of String)("Item_Number") = b And r.Field(Of Integer)("SOP_Type") = c
             Select r.Field(Of Integer)("Quantity")).Sum
    DGV1.Rows(0).Cells(0).Value = Total
End Sub

【讨论】:

  • 我非常感谢您的帮助,当我使用此代码时,它需要很长时间才能运行,因为我有非常大的数据库,所以我需要一个代码而不循环每一行,例如方法“计算“我在我的问题中使用了我希望你能帮助我我非常需要这个代码来完成我的会计工作
  • 我们在谈论多少行? Linq 并不以速度着称。无论您使用哪种方法,都必须检查每一行,并且必须在您可见的循环中或在 .Compute 中完成。
  • 98,000 行,每行将循环 11,000 次以找到项目行
  • 我有数据表包含 98000 行,每行都有数量列,sop_type 和项目编号,我有 datagridview 包含 11000 行,每行有列项目编号我需要对数量求和数据表中的每个项目并将总和复制到项目行中的datagridview
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-29
  • 2014-08-06
  • 1970-01-01
相关资源
最近更新 更多