C# DataTable 仅某几列值相同时的去重

简单来说

如题所示,今天遇到的一个需求是,将 DataTable 去重,但这个去重并不是两行完全相同才去,这个去重详情是,如果 DataTable 中,某两列值相同,则任取其一值,以得到一个那两列无相同值、表结构相同的 DataTable。

Show Me The Code

两行完全相同时的去重

两行完全相同时的去重,比较简单。假设待去重的 Datable 叫 originalDt,其内值为:

col1col2col3col4
1234
4567
1234

则去重操作如下:

DataView tempView = new DataView(originalDt);
DataTable resultDt = 
	tempView.ToTable(true,new string [] {"col1","col2","col3","col4"}); // true 表示去重,第二参数为新 DataTable 的诸列

其中,resultDt 为去重后的得到的 DataTable。

指定两列相同的去重

指定两列相同的去重,也不难。假设待去重的 Datable 叫 originalDt,其内值为:

col1col2col3col4
1234
4567
8239

则去重操作如下:

DataTable resultDt = originalDt.Clone(); // 复制表结构
var groups = resultDt.AsEnumerable().GroupBy(row => row["col2"].ToString() + row["col3"].ToString());
foreach (var group in groups)
{
    DataRow newRow = resultDt.NewRow();
    newRow.ItemArray = group.ElementAt(0).ItemArray;
    resultDt.Rows.Add(newRow);
}

其中,有重时取分组中第一条数据。

就酱。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kang Tao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值