0

Azure 表查询 api 本身不支持 startwith 运算符,但可以使用以下格式的查询字符串来构建它。下面的示例是尝试执行 rowKey.startWith('myrowkey') 操作。

?$filter=PartitionKey eq 'mykey' and RowKey ge 'myrowkey' and RowKey lt 'myrowkez'

为此,我正在编写一个getNextKey返回字典下一个键的函数。该函数用于生成查询字符串。

   {
        _getStartWithQueryString: function getStartWithQueryString(partitionKey, rowKey)
        {
            var nextRowKey = this._getNextKey(rowKey);
            var filterValue = "PartitionKey eq '" + partitionKey + 
              "' and RowKey ge '" + rowKey + "' and RowKey lt '" + nextRowKey + "'";
            var parameters = {
                '$filter' : filterValue,
            };
            var params = Utils.Http.stringifyParameters(parameters);
            return params;
        },
        _getNextKey: function getNextKey(key)
        {
            var lastCharCode = key.charCodeAt(key.length - 1);
            var nextLastCharCode = ++lastCharCode;
            var result = key.substr(0, key.length - 1) + String.fromCharCode(nextLastCharCode);
            return result;
        },
        queryAzureTable: function queryAzureTable(...)
        {
            var baseUrl = config.storageAccount.url;
            var queryUrl = this._getStartWithQueryString('2013-05-28T07', '2511cc20-ecff-46d2-bc13-ec9cb9ca3498');
            var resourceUri = 'mytable()' ;
            var url = baseUrl + resourceUri + '?' + queryUrl;

            // more code to invoke azure table query entities rest api
        }

现在的问题是:RowKey 可以包含字母数字字符、“-”和“。”

我的测试结果如下所示:getNextKey('myrowkey') -> 'myrowkez'

getNextKey('00') -> '01'

getNextKey('09') -> '0:'

getNextKey('0-') -> '0.'

getNextKey()您是否看到任何可能导致 azure 查询错误结果的正确性问题?

4

1 回答 1

0

我使用以下代码来执行此操作,并且非常适合我:

public static string NextComparisonString(this string s)   
{
    if (string.IsNullOrEmpty(s))
        throw new ArgumentException("The string argument must not be null or empty!");

    var lastChar = s[s.Length - 1];
    if (lastChar + 1 > char.MaxValue)
        throw new ArgumentException("Cannot convert the string.");

    return string.Format("{0}{1}", s.Substring(0, s.Length - 1), (char)(lastChar + 1));
}
于 2013-08-12T14:16:49.690 回答