Azure Table 存储过滤器错误?

Azure Table Storage filter bug?

我正在向 Azure Table 存储发送一个查询,它选择一系列具有以下条件的实体:

$filter=
(PartitionKey eq 'key')
 and
(
    (
        (RowKey gt '08D372E4E0A02B2600000000')
         and
        (RowKey le '08D372E4E515E3E9FFFFFFFF')
    )
     and
    (
        (Done ne 'true')
         or
        (EndTimestamp gt '635978299756075046')
    )
)

我需要范围内的所有记录,这些记录要么未完成(完成 ne 'true'),要么在特定时间后完成(EndTimestamp gt '635978299756075046')。完成是 'bool?',结束时间戳是 'Int64?'。

在Fiddler中我可以清楚的看到返回了这样一条记录:

{  
  "PartitionKey":"key",
  "RowKey":"08D372E4E0A0B8F5002CDBE3",
  "Done":true,
  "EndTimestamp@odata.type":"Edm.Int64",
  "EndTimestamp":"635978299737021249",
}

什么不满足EndTimestamp条件:635978299737021249明显小于635978299756075046.

似乎是一个错误,还是我遗漏了什么?

作为解决方法,我可以在 运行 时进行额外检查,但是 (1) 这违背了在服务器端进行过滤的目的,并且 (2) 我想减少流量和查询次数 - 那里可以是数千个不满足条件的实体。

找到问题了,那是我的错误。 正确的条件是:

    (Done ne true)
     or
    (EndTimestamp gt 635978299756075046L)

我使用 TableQuery.GenerateFilterCondition 辅助方法,它只接受字符串,所以它会在值中添加引号。