2016-05-26 9 views
-1

C#でAWS DynamoDBの "Object Persistence Model"を使用しているときに、面白い問題が発生しました。スキャン操作の結果を解析します。以下のコードでは、Datastore.userIndicators(ユーザー名でインデックスされたオブジェクトのリストを持つ辞書)の私のエントリは常に空のリストです。私は値が「ユーザA」の属性「ユーザー名」が含まれ、私のテーブルのエントリを持っている場合は、このコードを実行するときなぜIEnumerable.Where()はDynamoDBContext.Scan()の結果で自分のオブジェクトを見つけることができませんか?

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

ので、例えば、辞書「Datastore.userIndicatorsは」のエントリで終わるだろうキー "userA"が、対応する値は空のリストになります。

答えて

1

これをいじると勘に従った後、私は

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

出来上がりに

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

の割り当てを変更しました!

AWS SDK documentationによって確認されたように)それは結局のところ、DynamoDBContext.Scan()メソッドの戻り値は、レイジーロードです。 .ToList()を呼び出すと列挙が強制され、すべての結果がロードされます。

関連する問題