UiPath有自带的去重组件Remove Duplicate Rows,这个组件是针对DataTable中的所有Column去重的。有时我们不想对DataTable中的所有列去重,只想针对某几列数据去重,这个组件就不能满足我们的需求了。
表格信息:
姓名 | 班级 | 语文 | 数学 |
---|---|---|---|
张三 | 二 | 80 | 90 |
张三 | 二 | 80 | 90 |
张三 | 三 | 90 | 95 |
张三 | 三 | 95 | 100 |
李四 | 二 | 65 | 88 |
李四 | 三 | 79 | 82 |
王五 | 三 | 99 | 100 |
如果使用Remove Duplicate Rows组件,第一行的数据将被删除,去重后的数据长这样:
但是如果我们只想针对前两列姓名和班级进行去重,Remove Duplicate Rows组件就心有余而力不足了。针对前两列进行去重后的数据长这样:
这时我们可以对前两列进行分组,并对分组后的数据只选第一条就可以实现这个功能。具体代码如下:
drDistinctOrFirstFromGroup = (From d In dtData
Group d By k1=d(0).toString.Trim, k2=d(1).toString.Trim Into grp=Group
Select grp.First()).toList
这里drDistinctOrFirstFromGroup的数据类型为List<DataRow>
获得分组后的List后在转成DataTable就可以了。
这里可以灵活控制对哪几个Column进行分组,完全可以弥补Remove Duplicate Rows组件的不足!