【问题标题】:Why doesn't IEnumerable.Where() find my objects in DynamoDBContext.Scan() results?为什么 IEnumerable.Where() 在 DynamoDBContext.Scan() 结果中找不到我的对象?
【发布时间】:2016-05-26 04:18:20
【问题描述】:

在 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();
}

因此,例如,如果我的表中有条目包含属性“UserName”,其值为“userA”,则在运行此代码时,字典“Datastore.userIndicators”将以键“userA”的条目结束但相应的值将是一个空列表。

【问题讨论】:

    标签: c# amazon-dynamodb object-persistence


    【解决方案1】:

    在摆弄这个之后,我根据预感修改了分配

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

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

    瞧!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多