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

如何在UiPath的For Each循环中不用Add to Collection活动通过Query添加值

在UiPath For Each循环中通过Query方式向集合变量添加值(无需Add to Collection活动)

针对DataTable类型集合

  1. 先初始化目标DataTable,确保结构与源DataTable一致:
    dtResult = dtOriginal.Clone()
    
  2. 若要批量筛选并添加,可直接在循环外通过Linq Query完成(替代循环内逐行添加):
    dtResult = dtOriginal.AsEnumerable().Where(Function(row) row("Status").ToString() = "Completed").CopyToDataTable()
    
  3. 若必须在For Each循环内逐行判断后追加,用Linq的Concat方法实现:
    ' 处理空表情况,避免第一次追加报错
    If dtResult.Rows.Count = 0 Then
        dtResult.ImportRow(currentRow)
    Else
        dtResult = dtResult.AsEnumerable().Concat({currentRow}).CopyToDataTable()
    End If
    
    注:currentRow是For Each循环中遍历的当前行变量。

针对List类型集合

  1. 初始化目标List:
    listResult = New List(Of String)()
    
  2. 循环内逐行追加(用Linq的Concat,无需去重):
    listResult = listResult.Concat({currentItem}).ToList()
    
    若需要去重,替换为Union方法:
    listResult = listResult.Union({currentItem}).ToList()
    
  3. 批量筛选添加(替代循环):
    listResult = originalList.Where(Function(item) item.StartsWith("Prefix")).ToList()
    

注意事项

  • 使用CopyToDataTable()时,需确保Linq查询结果不为空,否则会抛出异常,可通过DefaultIfEmpty()处理空结果:
    dtResult = dtOriginal.AsEnumerable().Where(Function(row) row("Value") > 100).DefaultIfEmpty(dtOriginal.NewRow()).CopyToDataTable()
    
  • List类型的Concat和Union均返回新集合,需重新赋值给目标变量才能生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:50:22