ServiceStack.Aws支持"最后评估密钥"在DynamoDB上?

时间:2016-06-26 22:43:44

标签: c# servicestack amazon-dynamodb pocodynamo

在DynamoDB中,当设置了limit属性时,DynamoDB将返回一个"最后一次评估的密钥"用于分页(见here

我想知道ServiceStack.Aws是否支持此功能(适用于.NET c#版本),或者我是否需要直接使用AWSSDK客户端

由于

修改 我想实现服务器端分页。怎么能实现这个uss 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 个答案:

答案 0 :(得分:1)

当您使用返回IEnumerable<T>的{​​{3}}时,PocoDynamo,即:

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响应获取所需数量的结果,以获取下一页结果。

对于接受限制并返回具体List<T>的API,结果仍然会使用LastEvaluatedKey来获取结果,但他们却急切地想要在返回之前进入具体的List<T>