AWS DynamoDB:查询可在控制台上运行,但不适用于.NET代码

时间:2019-08-29 00:59:34

标签: c# amazon-web-services amazon-dynamodb dynamodb-queries

我有一个DynamoDB查询,该查询在AWS控制台上运行良好,但在代码上却没有。

这是我在控制台上的查询: enter image description here

现在这是我的C#代码来查询它:

var query = new QueryOperationConfig
            {
                KeyExpression = new Expression
                {
                    ExpressionStatement = "#pkey = :v_pkey and #skey >= :v_skey",
                    ExpressionAttributeNames = {
                        { "#pkey", "MailingId" },
                        { "#skey", "RegistroCarteiraId" },
                    },
                    ExpressionAttributeValues = new Dictionary<string, DynamoDBEntry>()
                    {
                        { ":v_pkey", new Primitive("62", true) },
                        { ":v_skey", new Primitive("00e0bbfc-aed0-4f0e-acef-a3623a9f9694") },
                    },
                },
                BackwardSearch = false,
                ConsistentRead = true,
                Limit = 1,
                FilterExpression = new Expression
                {
                    ExpressionStatement = "#psituacao = :v_psituacao and attribute_not_exists(#pdisponibilidade)",
                    ExpressionAttributeNames =
                    {
                        { "#psituacao", "Situacao" },
                        { "#pdisponibilidade", "Disponibilidade" }
                    },
                    ExpressionAttributeValues =
                    {
                        { ":v_psituacao", new Primitive("1", true) },
                    }
                }
            };

            var search = table.Query(query);
            var docs = await search.GetNextSetAsync();

我没有错误,结果只有一个空数组。如果我将排序键更改为其他值,则可以使用,但对于此特定值,则不能...

我整天都在忙着,无法弄清楚出什么问题了。

任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

问题出在 LIMIT 1

我发现,过滤器仅发生在获取的项目上,并且由于我只提取1个项目,因此当发生过滤器时,结果中没有符合条件的记录。

取消限制1解决了这个问题。