来自数据表或数据视图的Groupby和Sum

时间:2018-04-03 09:25:52

标签: vb.net datatable grouping dataview

我有一个数据表(从xls文件填充),含有不同种类的水果和豆类。

我从这个数据表中创建一个数据视图,并使用RowFilter只有土豆和西红柿。

现在,我尝试制作一个群组(使用列'名称')并从另一列'数量'中进行总结。

实际上:

Name    |  Quantity  | color
tomatoe |     2      |  red
tomatoe |     1      |  red
potatoe |     5      |  yellow
tomatoe |     1      |  red
potatoe |     1      |  yellow

我会返回这样的数据表或数据视图:

Name    |  Quantity | color
tomatoe |     4     |  red
potatoe |     6     |  yellow

我该怎么做?

很抱歉,如果这很简单,但我也是那么。

1 个答案:

答案 0 :(得分:2)

使用Linq-To-DataTable,在这种情况下Dim fruitGroups = table.AsEnumerable().GroupBy(Function(row) row.Field(Of String)("Name"))

Dim tableResult = table.Clone() ' empty table with same columns
For Each grp In fruitGroups 
    tableResult.Rows.Add(grp.Key, grp.Sum(Function(row) row.Field(Of Int32)("Quantity")), grp.First().Field(Of String)("Color"))
Next

现在您可以创建结果表:

Name

这将采用每组的任意颜色(第一组)。因此,如果您希望按ColorDim fruitGroups = table.AsEnumerable(). GroupBy(Function(row) New With { Key .Name = row.Field(Of String)("Name"), Key .Color = row.Field(Of String)("Color") }) Dim tableResult = table.Clone() For Each grp In fruitGroups tableResult.Rows.Add(grp.Key.Name, grp.Sum(Function(row) row.Field(Of Int32)("Quantity")), grp.Key.Color) Next 的组合进行分组,则必须按匿名类型进行分组:

DataView

如果您需要tableResult.DefaultView,可以使用$username = 'testName'; $password = '1234567'; $secret = 'yoursecret';