在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
,但该委托如何返回最后评估的密钥?有可能吗?
由于
由于
答案 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>
。