在C#中使用AWS DynamoDB“对象持久性模型”时遇到了一个有趣的问题;解析扫描操作的结果。在下面的代码中,我在Datastore.userIndicators中的条目(这是一个包含对象列表的字典,由用户名索引)始终是空列表。
var allIndicators = context.Scan<Indicator>();
Datastore.globalIndicators = allIndicators.Where(i => i.UserName == "*").ToList();
var userDefinedIndicators = allIndicators.Where(i => i.UserName != "*");
foreach (var username in userDefinedIndicators.Select(i => i.UserName).Distinct())
{
Datastore.userIndicators[username] = userDefinedIndicators.Where(i => i.DynamoDbRangeKey.StartsWith(username)).ToList();
}
因此,例如,如果我的表中的条目包含值为“userA”的属性“UserName”,则在运行此代码时,字典“Datastore.userIndicators”将以键“userA”的条目结束但相应的值将是一个空列表。
答案 0 :(得分:1)
在摆弄这个并且预感到之后,我修改了
的分配var allIndicators = context.Scan<Indicator>();
到
var allIndicators = context.Scan<Indicator>().ToList();
瞧!
事实证明(由AWS SDK documentation确认),DynamoDBContext.Scan()方法的返回是 延迟加载 。调用.ToList()强制枚举并加载所有结果。