如何在Logic App中检查集合内是否存在指定匹配键值
解决方案:在Logic App中检查集合是否存在指定键值匹配项
针对你的需求,不需要用For Each循环(这也是你报错的常见原因,循环内的条件判断逻辑容易出错),直接用Logic App内置的Filter Array操作或表达式就能高效解决,核心要注意类型匹配(你的FundKey是字符串类型,ReportType是数字类型,必须统一类型后再比较)。
方法一:使用Filter Array操作(直观易维护)
- 添加Filter Array操作,在「From」选项中选择数组变量
variables('ReportTypeCollection') - 设置筛选条件:
- 左侧输入:
item()?['FundKey'](引用数组中每个元素的FundKey字段) - 中间选择「is equal to」
- 右侧输入表达式:
string(body('Process_Filtered_Output')?['FilteredResults'][0]?['ReportType'])(把ReportType的数字转成字符串,和FundKey类型统一)
- 左侧输入:
- 添加Condition操作,判断Filter Array的输出长度是否大于0:
- 左侧输入:
length(body('Filter_Array')) - 中间选择「is greater than」
- 右侧输入:
0
- 左侧输入:
- 如果Condition结果为「Yes」,说明存在匹配项;「No」则不存在。
方法二:直接用表达式在Condition中判断(更简洁)
不需要额外添加Filter Array,直接在Condition的判断框中输入以下表达式:
length(filterArray(variables('ReportTypeCollection'), equals(item()?['FundKey'], string(body('Process_Filtered_Output')?['FilteredResults'][0]?['ReportType'])))) > 0
- 表达式逻辑:用
filterArray筛选出匹配的元素,再用length判断结果数组长度,大于0则表示存在匹配项。
关键注意点
- 类型匹配:你的
FundKey是字符串(比如"1"),而ReportType是数字(比如1),直接比较会不匹配,必须用string()把数字转成字符串,或者用int()把FundKey转成数字。 - 空值处理:表达式中用
?是为了防止字段不存在时抛出错误,提升流程健壮性。
内容的提问来源于stack exchange,提问作者dotnetlooper
相关产品推荐
相关产品推荐

