如何在UiPath的For Each循环中不用Add to Collection活动通过Query添加值
在UiPath For Each循环中通过Query方式向集合变量添加值(无需Add to Collection活动)
针对DataTable类型集合
- 先初始化目标DataTable,确保结构与源DataTable一致:
dtResult = dtOriginal.Clone() - 若要批量筛选并添加,可直接在循环外通过Linq Query完成(替代循环内逐行添加):
dtResult = dtOriginal.AsEnumerable().Where(Function(row) row("Status").ToString() = "Completed").CopyToDataTable() - 若必须在For Each循环内逐行判断后追加,用Linq的
Concat方法实现:
注:' 处理空表情况,避免第一次追加报错 If dtResult.Rows.Count = 0 Then dtResult.ImportRow(currentRow) Else dtResult = dtResult.AsEnumerable().Concat({currentRow}).CopyToDataTable() End IfcurrentRow是For Each循环中遍历的当前行变量。
针对List类型集合
- 初始化目标List:
listResult = New List(Of String)() - 循环内逐行追加(用Linq的
Concat,无需去重):
若需要去重,替换为listResult = listResult.Concat({currentItem}).ToList()Union方法:listResult = listResult.Union({currentItem}).ToList() - 批量筛选添加(替代循环):
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
相关产品推荐
相关产品推荐

