ServiceStack. Поддерживает ли "последний оцененный ключ" на DynamoDB?
В DynamoDB, когда свойство limit установлено, DynamoDB будет возвращать "последний оцененный ключ", который используется для разбивки на страницы (см. Здесь)
Я хочу знать, поддерживает ли ServiceStack.Aws эту функцию (для версии.NET C#), или мне нужно напрямую использовать клиент AWSSDK
Спасибо
РЕДАКТИРОВАТЬ: Я хочу реализовать нумерацию на стороне сервера. Как этого добиться, используя PocoDynamo? Мой код выглядит так
public IList<Company> GetCompanies(string shortName, ref string lastKeyEvaluated)
{
IList<Company> data = null;
using (AmazonDynamoDBClient awsDynamoDbClient = new AmazonDynamoDBClient())
{
IPocoDynamo dbDynamo = new PocoDynamo(awsDynamoDbClient);
var queryExpression = dbDynamo.FromQuery<Company>(c => c.ShortName == shortName);
data = dbDynamo.Query(queryExpression, 10); //How can i pass lastEvaluatedKey?
var awsdkClient = dbDynamo.DynamoDb; //Can i get last evaluated key from original AWSDK client?
}
return data;
}
РЕДАКТИРОВАТЬ 2: В некоторых ответах они сказали мне, что мне нужно использовать параметр делегата. Но, похоже, что этот делегат ожидает объект QueryResponse и возвращает IEnumerable. Из QueryResponse я знаю, что я могу получить LastEvaluatedKey
, но как этот делегат может вернуть последний оцененный ключ? Это можно сделать?
Спасибо
Спасибо
1 ответ
В PocoDynamo, когда вы используете API запросов или сканирования, которые возвращают IEnumerable<T>
т.е.
public interface IPocoDynamo
{
//...
IEnumerable<T> ScanAll<T>();
IEnumerable<T> Scan<T>(ScanRequest request, Func<ScanResponse, IEnumerable<T>> fn);
IEnumerable<T> Scan<T>(ScanExpression<T> request);
IEnumerable<T> Query<T>(QueryExpression<T> request);
IEnumerable<T> Query<T>(QueryRequest request);
IEnumerable<T> Query<T>(QueryRequest request, Func<QueryResponse, IEnumerable<T>> fn);
}
PocoDynamo возвращает ленивую последовательность, которая прозрачно отправляет несколько постраничных запросов, чтобы получить столько результатов, сколько необходимо, используя LastEvaluatedKey
Ответ, чтобы получить следующую страницу результатов.
Для API, которые принимают лимит и возвращают конкретный List<T>
результаты все еще используют LastEvaluatedKey
чтобы получить результаты, но они вместо этого охотно извлекаются в бетон List<T>
до возвращения