如何编写AQS查询以仅返回带有多个标签的文件?
如何编写AQS查询以仅返回带有多个标签的文件?
这个问题确实挺挠头的——AQS本身没有直接提供「匹配某个标签且标签数量大于1」的原生语法,但我们可以借助Windows处理多值属性的特性,用间接的方式实现需求。
先回顾下你的场景:
- File1:仅含标签「Tag 1」
- File2:含「Tag 1;Tag 2;Tag 3」
- File3:无标签
你已经知道System.Keywords:="Tag 1"会同时命中File1和File2,现在要做的就是排除掉仅含Tag1的文件。
可行的AQS查询语句
直接用这个组合查询就能精准匹配到File2:
System.Keywords:="Tag 1" AND System.Keywords:~="*;*"
逻辑解释
System.Keywords:="Tag 1":确保文件包含目标标签Tag1,先筛选出File1和File2;System.Keywords:~="*;*":利用Windows对多值System.Keywords的存储特性——多个标签会用分号;拼接成一个字符串。这个通配符查询会匹配标签字符串中包含分号的文件,也就是至少有两个标签的文件,这样就把仅含单个Tag1的File1排除了。
针对你的UWP应用场景的优化
之前你用StorageFolder.GetFilesAsync()逐个提取标签的方式确实效率低下,用这个AQS查询可以直接一步到位:
- 先查询所有含非空标签的文件(
NOT System.Keywords:[]),拿到任意一个带标签的文件后提取出标签; - 再用上面的组合查询,就能快速找到所有包含该标签且还有其他标签的文件,完全不用逐个遍历文件属性。
注意事项
- 这个方法依赖Windows用分号作为多值
System.Keywords的分隔符,目前所有Windows版本都是这么处理的,兼容性没问题; - 如果你的标签本身包含分号(不推荐这么设置标签),可能会出现误判,但实际使用中这种情况极少。
内容来源于stack exchange
相关产品推荐
相关产品推荐

