去除DataTable中的重复行

      在开发过程中,我们有时候会遇到这样或那样的情况以至于DataTable中存在重复行,但是我们有想要去掉这些重复行,我们可以采用如下方法,以代替复杂的循环判断。

 

 

      之后再用新的dtGrid替换DataSet中相应的DataTable即可。

 

      在这个过程中,我们用到了DataView提供的重载方法ToTable。以下内容来源于http://msdn.microsoft.com/zh-cn/library/a8ycds2f.aspx

 

1、ToTable()方法

返回值
类型:System.Data . . :: .DataTable
一个新的 DataTable 实例,其中包含所请求的行和列。

 

备注

 

由于此方法不允许指定输出 DataTable 的名称,因此其名称与源 DataTable 相同。由于此方法不允许指定可用列的子集,因此输出表与输入表包含相同的列。 

 

示例

 

下面的控制台应用程序示例创建一个 DataTable,用数据填充 DataTable,并根据原始数据创建一个筛选视图,最后创建一个包含筛选出的行的 DataTable

 

 

 

该示例在控制台窗口中显示以下文本:


Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12

 

Current Values in View
2, Fruit, Orange, 27
3, Bread, Muffin, 23

 

Table created from filtered DataView
2, Fruit, Orange, 27
3, Bread, Muffin, 23

New table name: NewTable 

 

 

2、ToTable(String)方法

参数
tableName
类型:System . . :: .String
返回的 DataTable 的名称。
返回值

类型:System.Data..::.DataTable
一个新的 DataTable 实例,其中包含所请求的行和列。

备注

 

由于此方法不允许指定可用列的子集,因此输出表与输入表包含相同的列。

 

示例

 

下面的控制台应用程序示例创建一个 DataTable,用数据填充 DataTable,并根据原始数据创建一个筛选视图,最后用一个新名称创建包含筛选出的行的 DataTable。 

 

 

该示例在控制台窗口中显示以下文本:

 
Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12

 

Current Values in View
2, Fruit, Orange, 27
3, Bread, Muffin, 23

 

Table created from filtered DataView
2, Fruit, Orange, 27
3, Bread, Muffin, 23

New table name: FilteredTable

 

3、ToTable(Boolean,String[])方法 

参数
distinct
类型:System . . :: .Boolean
如果为 true,则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false
columnNames
类型: array<System . . :: .String > [] () []
一个字符串数组,包含要包括在返回的 DataTable 中的列名的列表。 DataTable 包含指定的列,其顺序与这些列在该数组中的顺序相同
返回值

类型:System.Data..::.DataTable
一个新的 DataTable 实例,其中包含所请求的行和列。

 

备注

 

由于此方法不允许指定输出 DataTable 的名称,因此其名称与源 DataTable 的名称相同。

 

 

 

 

 

 

 

下面的控制台应用程序示例创建一个 DataTable,用数据填充 DataTable ,对 DataView 进行排序,最后创建一个仅包含两个列的 DataTable ,这两个列仅限于所有值都唯一的行。

 

 

 

 

 

 

该示例在控制台窗口中显示以下文本:

 
Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
6, Bread, Croissant, 23

 

Current Values in View
3, Bread, Muffin, 23
6, Bread, Croissant, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
1, Fruit, Apple, 14
2, Fruit, Orange, 27

 

Table created from sorted DataView
Bread, 23
Fish, 12
Fish, 15
Fruit, 14
Fruit, 27

 

New table name: NewTable

 

4、ToTable(String,Boolean,String[])方法

参数
tableName
类型:System . . :: .String
返回的 DataTable 的名称。
distinct
类型:System . . :: .Boolean
如果为 true,则返回的 DataTable 将包含所有列都具有不同值的行。默认值为 false
columnNames
类型: array<System . . :: .String > [] () []
一个字符串数组,包含要包括在返回的 DataTable 中的列名的列表。 DataTable 包含指定的列,其顺序与这些列在该数组中的顺序相同。
返回值
类型:System.Data . . :: .DataTable
一个新的 DataTable 实例,其中包含所请求的行和列。

如果必须检索可用列的子集中的不同的值,请使用 ToTable 方法的此重载版本,为返回的 DataTable 指定一个新名称。如果不需要不同的行或列的子集,请参见 ToTable

 

下面的控制台应用程序示例创建一个 DataTable,用数据填充 DataTable,对 DataView 进行排序,最后使用新的名称创建一个仅包含两个列的 DataTable ,这两个列仅限于所有值都唯一的行。

 

 

该示例在控制台窗口中显示以下输出:


Original table name: NewTable
Current Values in Table
1, Fruit, Apple, 14
2, Fruit, Orange, 27
3, Bread, Muffin, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
6, Bread, Croissant, 23

 

Current Values in View
3, Bread, Muffin, 23
6, Bread, Croissant, 23
4, Fish, Salmon, 12
5, Fish, Salmon, 15
1, Fruit, Apple, 14
2, Fruit, Orange, 27

 

Table created from sorted DataView
Bread, 23
Fish, 12
Fish, 15
Fruit, 14
Fruit, 27

 

New table name: UniqueData

在C#,使用`DataTable`对象去除基于特定列的重复数据是一个常见的需求。可以通过`DataTable`的`Compute`方法或者创建一个新的`DataTable`来实现。以下是基于特定列去除重复数据的一种方法: 1. 使用`DataTable`的`DefaultView`属性和`RowFilter`属性,结合`Unique`标志来过滤掉重复。这种方法适用于单个列去重。 ```csharp DataTable dt = new DataTable(); // 假设dt已经填充了数据 // 获取特定列的列名 string columnName = "需要去重的列名"; // 使用RowFilter属性过滤重复 DataTable uniqueTable = dt.DefaultView.ToTable(true, columnName); // uniqueTable 现在包含了去除重复数据的DataTable ``` 2. 如果需要根据多个列进去重,可以在`RowFilter`指定多个列名,并在`Compute`方法使用`Group By`语句。 ```csharp DataTable dt = new DataTable(); // 假设dt已经填充了数据 // 获取需要去重的列名数组 string[] columnNames = new string[] { "第一列名", "第二列名" }; // 构建Group By语句 string groupByStatement = string.Join(", ", columnNames); // 使用Compute方法进分组去重 DataTable uniqueTable = dt.Compute("count(" + columnName + ")", "Group By " + groupByStatement); // uniqueTable 现在包含了去除重复数据的DataTable ``` 需要注意的是,使用`Compute`方法时,需要确保分组列至少有一列是可以进计数操作的列(例如,存在非空或可计数的列),否则可能会导致结果不正确。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值