Это мой класс, который я сопоставляю со своими таблицами DynamoDB:
[DynamoDBTable("things")]
public class DynamoThing {
[DynamoDBHashKey(AttributeName = "id")]
public string Id { get; set; }
[DynamoDBProperty(AttributeName = "name")]
public string Name { get; set; }
[DynamoDBProperty(AttributeName = "tags")]
public List<string> Tags { get; set; }
[DynamoDBProperty(AttributeName = "containerId")]
public string ContainerId { get; set; }
}
Вот как я пытаюсь сканировать:
public static async Task<IEnumerable<ThingViewModel>> ListAsync(Guid? containerId = null) {
// initializing things for the client like key id, secret key etc.
using (var client = new AmazonDynamoDBClient(accessKeyId, secretKey, clientConfig))
using (var context = new DynamoDBContext(client)) {
ScanCondition condition;
if (containerId.HasValue) {
var containerIds = new object[] { containerId.Value.ToString() };
condition = new ScanCondition("ContainerId", ScanOperator.In, containerIds);
} else {
condition = new ScanCondition("ContainerId", ScanOperator.IsNull);
}
var scan = context.ScanAsync<DynamoThing>(new ScanCondition[] { condition });
List<DynamoThing> slice;
while ((slice = await scan.GetNextSetAsync()).Any()) {
dynamoThings.AddRange(slice);
}
}
}
} Работает только ScanOperator.IsNull
.При попадании в другую ветвь, ScanOperator.In
, scan.GetNextSetAsync()
блокирует поток.
Не все объекты на самом деле обладают свойством containerId
.Это тот случай?Нужно ли добавлять пустые атрибуты containerId
к каждому объекту?Или я делаю что-то еще не так или я нашел ошибку?