LINQ分组和分组行编辑

时间:2012-09-17 13:48:27

标签: sql vb.net linq datatable

我有一个看起来像以下的数据表

╔═══════════════╦═══════════════╦═══════════════╗
║ Product Name  ║ Product Price ║ Product Group ║
╠═══════════════╬═══════════════╬═══════════════╣
║ Skirt Red     ║            99 ║               ║
║ Jeans Blue    ║            49 ║               ║
║ Jeans Black   ║            49 ║               ║
║ Skirt Blue    ║            99 ║               ║
║ T-shirt White ║            20 ║               ║
║ T-shirt Green ║            20 ║               ║
║ Jeans Grey    ║            49 ║               ║
╚═══════════════╩═══════════════╩═══════════════╝

这只是一个例子Datatable和Real Datatable有更复杂的名称和颜色,你可以看到现在使用LINQ有不同颜色的simular产品我想让Datatable看起来像下面这样

╔═══════════════╦═══════════════╦═══════════════╗
║ Product Name  ║ Product Price ║ Product Group ║
╠═══════════════╬═══════════════╬═══════════════╣
║ Skirt Red     ║            99 ║             1 ║
║ Jeans Blue    ║            49 ║             2 ║
║ Jeans Black   ║            49 ║             2 ║
║ Skirt Blue    ║            99 ║             1 ║
║ T-shirt White ║            20 ║             3 ║
║ T-shirt Green ║            20 ║             3 ║
║ Jeans Grey    ║            49 ║             2 ║
╚═══════════════╩═══════════════╩═══════════════╝

什么定义了一个群体?价格是一样的,名字无关。

我是LINQ的新手,我想知道这样做的最佳方法是什么,我正在使用的Datatable有大约112000条记录

如此苛刻,我需要将相同价格的产品添加到一个组中,并在每个产品旁边添加一个数字,指向该组的点数

1 个答案:

答案 0 :(得分:1)

只需按价格对行进行分组,然后循环显示将组中每行的组字段设置为组编号。

Dim query =
    From row in table.AsEnumerable
    Group row By Price = row.Field(Of Integer)("Product Price") Into ProductGroups = Group
Dim grpNumber = 1
For Each grp In query
    For Each row In grp.ProductGroups
        row.SetField("Product Group", grpNumber)
    Next
    grpNumber += 1
Next