为什么IEnumerable.Where()在DynamoDBContext.Scan()结果中找不到我的对象?

时间:2016-05-26 04:18:20

标签: c# amazon-dynamodb object-persistence

在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”的条目结束但相应的值将是一个空列表。

1 个答案:

答案 0 :(得分:1)

在摆弄这个并且预感到之后,我修改了

的分配
var allIndicators = context.Scan<Indicator>();

var allIndicators = context.Scan<Indicator>().ToList();

瞧!

事实证明(由AWS SDK documentation确认),DynamoDBContext.Scan()方法的返回是 延迟加载 。调用.ToList()强制枚举并加载所有结果。