You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UiPath中如何高效删除DataTable内与另一表匹配的行

两个DataTable的高效差集筛选方案

你原有的嵌套遍历匹配方案时间复杂度为O(n*m),数据量偏大时运行效率极低,可通过HashSet优化查询效率,整体复杂度降至O(n+m),实现逻辑也非常简洁:

  • 步骤1:先将DatatableFile中所有待排除的文件名存入HashSet<string>,利用HashSet的O(1)查询特性提升匹配速度
// 请将代码中的FileName替换为你实际存储文件名的列名
HashSet<string> excludeFiles = new HashSet<string>();
foreach (DataRow row in DatatableFile.Rows)
{
    string fileName = row["FileName"].ToString().Trim();
    if (!excludeFiles.Contains(fileName))
    {
        excludeFiles.Add(fileName);
    }
}
// 如果需要忽略文件名大小写匹配,初始化HashSet时可指定参数
// HashSet<string> excludeFiles = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
  • 步骤2:根据业务场景选择对应筛选方式

    • 方案A:直接生成筛选后的新DataTable(逻辑最简单,不易出错,优先推荐)
    DataTable filteredTable = DatatableValue.AsEnumerable()
        .Where(row => !excludeFiles.Contains(row["FileName"].ToString().Trim()))
        .CopyToDataTable();
    // 后续业务直接使用filteredTable即可
    
    • 方案B:在原DatatableValue上直接删除匹配行
    List<DataRow> toDeleteRows = DatatableValue.AsEnumerable()
        .Where(row => excludeFiles.Contains(row["FileName"].ToString().Trim()))
        .ToList();
    foreach (DataRow row in toDeleteRows)
    {
        DatatableValue.Rows.Remove(row);
    }
    DatatableValue.AcceptChanges();
    
  • 注意事项

    • 代码中的FileName需要替换为两个DataTable里实际存储文件名的列名
    • 若文件名存在前后空格问题,可根据实际情况调整Trim()逻辑

内容的提问来源于stack exchange,提问作者Jonas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:36:04