2014-02-11 7 views
1

Я пытаюсь создать запрос с разбивкой по страницам, но я не уверен, с чего начать.Paginated DynamoDB Scan/Query .Net

У меня есть стол и DTO для таблицы, как так

[DynamoDBTable("ProfileMetrics")] 
public class ProfileMetricsDTO 
{ 
    [DynamoDBHashKey] 
    public string ProfileId { get; set; } 

    [DynamoDBRangeKey] 
    public string Key { get; set; } 
} 

Теперь я хочу, чтобы найти все ProfileMetrics, которые имеют ключ, скажем, «My_Key». И так как, вероятно, их будет много, мне нужно разбивать страницы на результаты. Я читал о LastEvaluatedKey и ExclusiveStartKey, но я не вижу, как обеспечить это, когда я пытаюсь сделать проверку следующим образом:

IEnumerable<ProfileMetricsDTO> results = context.Scan<ProfileMetricsDTO>(new ScanCondition("Key", ScanOperator.Equal, "My_Key")); 

Как ограничить результаты и обеспечить подкачку?

ответ

0

Похоже, вы можете сделать это, установив ExclusiveStartKey в ScanRequest:

// Create Scan request 
ScanRequest request = new ScanRequest 
{ 
    TableName = "SampleTable", 
    ExclusiveStartKey = startKey, 
    ScanFilter = conditions 
}; 

Смотрите пример здесь: http://aws-sdk-v2-preview-docs.s3-website-us-east-1.amazonaws.com/items/T_Amazon_DynamoDBv2_Model_ScanRequest_NET3_5.html

+1

Вы также можете использовать ExclusiveStartKey и предел с QueryRequest. Запросы могут быть более подходящими для некоторых вещей, поскольку сканирование считывает всю таблицу, что приводит к большей стоимости. – Ben

0

После прочтения документации более подробно, это не похоже на то, что это возможно.

0

Я только что нашел, вы можете использовать что-то вроде

context.FromScan<T>(new ScanOperationConfig 
{ 
    Limit = 10, 
    Filter = ... 
}); 

Есть FromQuery, FromQueryAsync, FromScan, FromScanAsync в контексте.