code: function (mParameters) {
  			var aKeys, aQuery;
  
  			if (!mParameters) {
  				return "";
  			}
  
  			aKeys = Object.keys(mParameters);
  			if (aKeys.length === 0) {
  				return "";
  			}
  
  			aQuery = [];
  			aKeys.forEach(function (sKey) {
  				var vValue = mParameters[sKey];
  
  				if (Array.isArray(vValue)) {
  					vValue.forEach(function (sItem) {
  						aQuery.push(_Helper.encodePair(sKey, sItem));
  					});
  				} else {
  					aQuery.push(_Helper.encodePair(sKey, vValue));
  				}
  			});
  
  			return "?" + aQuery.join("&");
  		}
docs: Builds a query string from the given parameter map. Takes care of encoding, but ensures
  that the characters "$", "(", ")", ";" and "=" are not encoded, so that OData queries
  remain readable.
  
  ';' is not encoded although RFC 1866 encourages its usage as separator between query
  parameters. However OData Version 4.0 Part 2 specifies that only '&' is a valid
  separator.
  
  @param {object} [mParameters]
  A map of key-value pairs representing the query string, the value in this pair has to
  be a string or an array of strings; if it is an array, the resulting query string
  repeats the key for each array value
  Examples:
  buildQuery({foo : "bar", "bar" : "baz"}) results in the query string "?foo=bar&bar=baz"
  buildQuery({foo : ["bar", "baz"]}) results in the query string "?foo=bar&foo=baz"
  @returns {string}
  The query string; it is empty if there are no parameters; it starts with "?" otherwise