在dynamodb中使用context.fromquery进行查询时,限制不起作用

时间:2017-09-27 10:45:50

标签: c# amazon-dynamodb

使用c#,代码就像这样

        DynamoDBContext context = new DynamoDBContext(client, new DynamoDBContextConfig() { TableNamePrefix = "lalala" });

        QueryFilter filter = new QueryFilter();
        filter.AddCondition("Userid", QueryOperator.Equal, "hashkeyvalue");
        QueryOperationConfig queryConfig = new QueryOperationConfig
        {
            Filter = filter,
            Select = SelectValues.AllProjectedAttributes,
            Limit = 1,
            IndexName = "Userid-UpdatedAtTimestamp-index"
        };
        try
        {
            var result = await context.FromQueryAsync<IAPRecord>(queryConfig).GetRemainingAsync();
            int ccc = result.Count;
        }
        catch (Exception ex)
        {
            throw new ArgumentException(ex.Message + ex.InnerException);
        }

和ccc应为1但现在它等于整个集合,好像Limit = 1不存在。

需要帮助!!

2 个答案:

答案 0 :(得分:1)

解决。

var query = context.FromQueryAsync<IAPRecord>(queryConfig);
var result = await query.GetNextSetAsync();
int ccc = result.Count;

显然GetRemainingAsync将获得所有结果,无论您在查询中设置了limit参数的数量。 相反,我们应该使用GetNextSetAsync。

答案 1 :(得分:0)

我遇到了类似的问题,发现这篇文章很有用。我将方法QueryAsync与全局二级索引一起使用。我找不到在可用的过载中限制结果的方法。通过更改为FromQueryAsync方法,我可以限制结果并避免lambda超时。我认为通过命名这两种方法之间的区别并不清楚,但是FromQueryAsync具有重载功能,可让您同时提供QueryOperationConfig和DynamoDBOperationConfig。第一个用于限制,第二个用于指定GSI或覆盖表名。