C# 为什么';t IEnumerable.Where()在DynamoDBContext.Scan()结果中查找我的对象?
在C#中使用AWS DynamoDB“对象持久性模型”时,遇到了一个有趣的问题;分析扫描操作的结果。在下面的代码中,我在Datastore.userIndicators(这是一个包含对象列表、按用户名索引的字典)中的条目始终是空列表C# 为什么';t IEnumerable.Where()在DynamoDBContext.Scan()结果中查找我的对象?,c#,amazon-dynamodb,object-persistence,C#,Amazon Dynamodb,Object Persistence,在C#中使用AWS DynamoDB“对象持久性模型”时,遇到了一个有趣的问题;分析扫描操作的结果。在下面的代码中,我在Datastore.userIndicators(这是一个包含对象列表、按用户名索引的字典)中的条目始终是空列表 var allIndicators = context.Scan<Indicator>(); Datastore.globalIndicators = allIndicators.Where(i => i.UserName == "*").ToL
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();
}
var allIndicators=context.Scan();
Datastore.globalIndicators=allIndicators.Where(i=>i.UserName==“*”).ToList();
var userDefinedIndicators=allIndicators。其中(i=>i.UserName!=“*”);
foreach(userDefinedIndicators.Select(i=>i.username.Distinct()中的var username)
{
Datastore.userIndicators[username]=userDefinedIndicators.Where(i=>i.DynamoDbRangeKey.StartsWith(username)).ToList();
}
因此,例如,如果我的表中有包含值为“userA”的属性“UserName”的条目,则在运行此代码时,字典“Datastore.userIndicators”将以键“userA”的条目结束,但相应的值将是一个空列表。在摆弄此项并遵循直觉之后,我修改了我的作业
var allIndicators = context.Scan<Indicator>();
var allIndicators=context.Scan();
到
var allIndicators=context.Scan().ToList();
瞧
事实证明(由确认),DynamoDBContext.Scan()方法的返回是延迟加载的。调用.ToList()强制枚举并加载所有结果
var allIndicators = context.Scan<Indicator>().ToList();