.NET持久化模型下DynamoDB OR条件查询无法返回正确记录问题
故障原因
DynamoDBOperationConfig中的ConditionalOperator属性仅对写入类操作的条件判断生效,不会控制Scan操作多过滤条件的逻辑关系,你配置的OR逻辑实际未生效。- 你将过滤条件同时传入了
ScanAsync方法的第一个入参和config.QueryFilter:QueryFilter是Query操作专属配置,Scan操作不会读取;同时ScanAsync方法第一个参数传入的多个ScanCondition默认逻辑关系为AND,相当于执行Status = VerficationPending AND Status = Verified,不可能同时满足两个条件,仅返回Verified记录属于执行巧合。
修复方案
方案1:同字段多值匹配最优写法
你当前是对同一个Status字段匹配多个枚举值,直接使用ScanOperator.IsIn即可实现OR效果,代码更简洁:
var conditions = new List<ScanCondition> { new ScanCondition("Status", ScanOperator.IsIn, Status.VerficationPending, Status.Verified) }; return await base.context.ScanAsync<Advertisement>(conditions).GetRemainingAsync();
方案2:多字段OR条件通用写法
如果你后续需要配置不同字段的OR过滤条件,可通过ScanFilter配合ConditionalOperator实现:
var scanFilter = new ScanFilter(); scanFilter.AddCondition("Status", ScanOperator.Equal, Status.VerficationPending); scanFilter.AddCondition("Status", ScanOperator.Equal, Status.Verified); var config = new DynamoDBOperationConfig { ConditionalOperator = ConditionalOperatorValues.Or }; return await base.context.ScanAsync<Advertisement>(scanFilter, config).GetRemainingAsync();
内容的提问来源于stack exchange,提问作者Pankaj Rawat
相关产品推荐
相关产品推荐

