function calculateKeptElementsQuery() {
			var aKeyFilters,
				mQueryOptions = _Helper.clone(that.mQueryOptions);

			if (that.mLateQueryOptions) {
				_Helper.aggregateExpandSelect(mQueryOptions, that.mLateQueryOptions);
			}
			if (bDropApply) {
				delete mQueryOptions.$apply;
			}
			delete mQueryOptions.$count;
			delete mQueryOptions.$orderby;
			delete mQueryOptions.$search;

			aKeyFilters = aPredicates.map(function (sPredicate) {
				return _Helper.getKeyFilter(that.aElements.$byPredicate[sPredicate], that.sMetaPath,
					mTypes);
			});
			mQueryOptions.$filter = aKeyFilters.join(" or ");
			if (aKeyFilters.length > 1) {
				// avoid small default page size for server-driven paging
				mQueryOptions.$top = aKeyFilters.length;
			}

			return that.sResourcePath
				+ that.oRequestor.buildQueryString(that.sMetaPath, mQueryOptions, false, true);
		}
Refreshes the kept-alive elements. This needs to be called before the cache has filled the
collection. In that state the $byPredicate contains only the kept-alive and created elements.

@param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
  A lock for the group ID
@param {function(string,number)} fnOnRemove
  A function which is called with predicate and index if a kept-alive or created element does
  no longer exist after refresh; the index is undefined for a non-created element
@param {boolean} [bIgnorePendingChanges]
  Whether kept elements are refreshed although there are pending changes.
@param {boolean} [bDropApply]
  Whether to drop the "$apply" system query option from the resulting GET
@returns {Promise<void>|undefined}
  A promise which is resolved without a defined result, or rejected with an error if the
  refresh fails, or <code>undefined</code> if there are no kept-alive elements.
@throws {Error}
  If the cache is shared

@public