2013-05-28 22 views
0

Azure表查詢API本身並不具有啓動運算符支持,但它可以通過使用以下格式的查詢字符串構建。下面的例子試圖做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()任何正確性問題,從而可能導致對蔚藍的查詢錯誤的結果?

回答

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)); 
}