1

在 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,但是这个委托如何返回最后评估的密钥?有可能吗?

谢谢

谢谢

4

1 回答 1

1

PocoDynamo 中,当您使用返回Query 或 Scan APIIEnumerable<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);
}

LastEvaluatedKeyPocoDynamo 返回一个惰性序列,该序列透明地发送多个分页请求,以使用Response 获取下一页结果所需的尽可能多的结果。

对于接受限制并返回具体结果的 API,List<T>结果仍用于LastEvaluatedKey获取结果,但它们在List<T>返回之前被急切地提取到具体内容中。

于 2016-06-26T23:57:34.200 回答