vb.net - 乘以数据表中的值

vb.net - multiplying values from datatable

我在 vb.net 工作,在我的程序中我有两个数据表。我想要的是将第二个数据表中某些 IZ 的数量与第一个数据表中相同 IZ 的数量相乘。我想为每个 IZ 都这样做。

例如,对于 IZ12554,它就像 1*460=460 和 0,0025*460=1,15;对于 IZ10836,它将是 3*2000=6000; 1*2000=2000; 1*2000=2000 等,并将这些结果写入数据表 3.

DATATABLE 1 Capacity IZ Quantity ID Document ------------------------------------------- DM00006 IZ12554 460 20 PDN00084625 DM00007 IZ10836 2000 1 PDN00084983 DM00010 IZ12641 25200 1 PDN00084997 DM00011 IZ03941 940 1 PDN00084639 DM00087 IZ15137 50 12 PDN00084904 .... ....

DATATABLE 2 IZ MA Quantity Unit ---------------------------------- IZ12554 MA06196 1 KOS IZ12554 MA05545 0,0025 KOS IZ10836 MA06199 3 KOS IZ10836 MA06197 1 KOS IZ10836 MA00892 1 kos IZ12641 MA06199 1 KOS IZ12641 MA32200 0,04 m IZ03941 MA07639 0,0025 KOS IZ03941 MA00896 0,295 M IZ03941 MA06200 1 KOS IZ03941 MA00892 1 kos IZ15137 MA06200 1 KOS IZ15137 MA00557 0,0025 KOS IZ15137 MA00897 0,295 M ... ... DATATABLE 3 - RESULTS IZ MA Quantity Unit ---------------------------------- IZ12554 MA06196 460 KOS IZ12554 MA05545 1,15 KOS IZ10836 MA06199 6000 KOS IZ10836 MA06197 2000 KOS IZ10836 MA00892 2000 kos IZ12641 MA06199 25200 KOS IZ12641 MA32200 1000,8 m IZ03941 MA07639 2,35 KOS IZ03941 MA00896 277,3 M IZ03941 MA06200 940 KOS IZ03941 MA00892 940 kos IZ15137 MA06200 50 KOS IZ15137 MA00557 0,125 KOS IZ15137 MA00897 14,75 M ... ...

我搜索了答案,但仍然不知道如何使用数据表,我是编程的初学者...

提前致谢!

您可以尝试类似的操作:

DataTable DataTable3 = new DataTable();

DataColumn myDataColumn;
myDataColumn = new DataColumn();
myDataColumn.DataType = Type.GetType("System.String");
myDataColumn.ColumnName = "IZ";
DataTable3.Columns.Add(myDataColumn);

DataColumn myDataColumn;
myDataColumn = new DataColumn();
myDataColumn.DataType = Type.GetType("System.String");
myDataColumn.ColumnName = "MA";
DataTable3.Columns.Add(myDataColumn);

DataColumn myDataColumn;
myDataColumn = new DataColumn();
myDataColumn.DataType = Type.GetType("System.Int32");
myDataColumn.ColumnName = "Sum_QTY";
DataTable3.Columns.Add(myDataColumn);
//ADD More columns to DataTable Here

foreach(DataRow row in DataTable1.Rows){
 foreach(DataRow row2 in DataTable2.Rows){
   if (row["IZ"].ToString()==row2["IZ"].ToString()){
    //Row3 is the row from Table 3
    row3 = DataTable3.NewRow();

    row3["IZ"]=row["IZ"].ToString();
    row3["MA"]=row2["MA"].ToString();
    row3["Sum_QTY"]=row2["Quantity"]*row["Quantity"];
    //ADD calculations here and add them to row3
    DataTable3.Rows.Add(row3);
  }
 }
}

正如对问题的评论所建议的那样,在数据库中执行此操作可能更有效,但您可以使用 LINQ to DataSet 加入数据并执行计算:

Dim result =
    From r2 In dt2.AsEnumerable()
    Join r1 In dt1.AsEnumerable() On r2.Field(Of String)("IZ") Equals r1.Field(Of String)("IZ")
    Select
        IZ = r2.Field(Of String)("IZ"),
        MA = r2.Field(Of String)("MA"),
        Quantity = r2.Field(Of Decimal)("Quantity") * r1.Field(Of Integer)("Quantity"),
        Unit = r2.Field(Of String)("Unit")

这为您提供了一个 IEnumerable 匿名类型,其中包含您想要的结果。我不知道有什么内置方法可以将其转换回 DataTable(如果您需要的话),但您可以稍加思考就可以做到。有关更多详细信息,请参阅 this question,但像这样的东西应该有效:

<Extension>
Function ToDataTable(Of T)(items As IEnumerable(Of T)) As DataTable
    Dim dt = New DataTable()
    Dim props = GetType(T).GetProperties()
    For Each prop In props
        Dim dc = dt.Columns.Add(prop.Name, prop.PropertyType)
    Next
    For Each item In items
        Dim dr = dt.NewRow()
        For Each prop In props
            dr(prop.Name) = prop.GetValue(item)
        Next
        dt.Rows.Add(dr)
    Next
    Return dt
End Function

然后您可以:

Dim dt3 = result.ToDataTable()
' or ToDataTable(result) if you don't make it an extension method