将新列添加到datatable,其中包含具有特定条件的其他列的总和

时间:2016-01-05 00:59:38

标签: .net vb.net linq lambda datatable

我有一个数据表,其数值很少,如下所示。

dtLabel     | size    | QTY
----------------------------
2015/11     | 204      | 272    
2015/12     | 204      | 235    
2015/11     | 204      | 254    
2016/01     | 204      | 259    

我正在寻找一种方法来向数据表中添加包含总数的新列 对于给定的dtLabel的QTY 所以新的数据表看起来应该是这样的

dtLabel     | size    | QTY   | TotalQTY
--------------------------------------
2015/11     | 204      | 272  |  272+254
2015/12     | 204      | 235  |  235
2015/11     | 204      | 254  |  272+254
2016/01     | 204      | 259  |  259

Linq或lambda会很有帮助 感谢

1 个答案:

答案 0 :(得分:1)

假设您有这样的数据表:

Dim dataTable As DataTable = New DataTable()
dataTable.Columns.Add("Id", GetType(Integer))
dataTable.Columns.Add("Date", GetType(DateTime))
dataTable.Columns.Add("Size", GetType(Integer))
dataTable.Columns.Add("Qty", GetType(Integer))
dataTable.Columns.Add("TotalQty", GetType(Integer))
dataTable.PrimaryKey = New DataColumn() {dataTable.Columns(0)}

您的数据表数据是这样的:

dataTable.Rows.Add(New Object() {1, New DateTime(2015, 11, 1), 204, 272})
dataTable.Rows.Add(New Object() {2, New DateTime(2015, 12, 1), 204, 235})
dataTable.Rows.Add(New Object() {3, New DateTime(2015, 11, 1), 204, 254})
dataTable.Rows.Add(New Object() {4, New DateTime(2016, 1, 1), 204, 259})

因此我们可以结合使用GroupBy,SelectMany和Sum来计算 TotalQty 字段

Dim results = dataTable.Rows _
                .Cast(Of DataRow) _
                .GroupBy(Function(s As DataRow) s.Item("Date")) _
                .SelectMany(Function(rows) rows.Select(Function(row) Tuple.Create(row.Item("Id"), rows.Sum(Function(dataRow) dataRow.Item("Qty")))))

For Each result As Tuple(Of Object, Integer) In results
    dataTable.Rows.Find(result.Item1).Item("TotalQty") = result.Item2
Next

然后我们可以用TotalQty计算

来显示数据表数据
For Each row As DataRow In dataTable.Rows
    Console.WriteLine("> Date: {0}, Size: {1}, Qty: {2}, TotalQty: {3}", row.Item(1), row.Item(2), row.Item(3), row.Item(4))
Next

输出结果为:

  

日期:01/11/2015 00:00:00,大小:204,数量:272,总数:526

     

日期:01/12/2015 00:00:00,大小:204,数量:235,总数:235

     

日期:01/11/2015 00:00:00,大小:204,数量:254,总数:526

     

日期:01/01/2016 00:00:00,大小:204,数量:259,总数:259

相关问题