private void RemoveValue(PatchRequest patchCmd, string propName, RavenJToken token) { EnsurePreviousValueMatchCurrentValue(patchCmd, token); if (token == null) { token = new RavenJArray(); document[propName] = token; } var array = GetArray(token, propName); array = new RavenJArray(array); document[propName] = array; var position = patchCmd.Position; var value = patchCmd.Value; if (position == null && (value == null || value.Type == JTokenType.Null)) { throw new InvalidOperationException("Cannot remove value from '" + propName + "' because position element does not exists or not an integer and no value was present"); } if (position != null && value != null && value.Type != JTokenType.Null) { throw new InvalidOperationException("Cannot remove value from '" + propName + "' because both a position and a value are set"); } if (position != null && (position.Value < 0 || position.Value >= array.Length)) { throw new IndexOutOfRangeException("Cannot remove value from '" + propName + "' because position element is out of bounds"); } if (value != null && value.Type != JTokenType.Null) { foreach (var ravenJToken in array.Where(x => RavenJToken.DeepEquals(x, value)).ToList()) { array.Remove(ravenJToken); } return; } if (position != null) { array.RemoveAt(position.Value); } }
private void RemoveValue(PatchRequest patchCmd, string propName, RavenJToken token) { EnsurePreviousValueMatchCurrentValue(patchCmd, token); if (token == null) { token = new RavenJArray(); document[propName] = token; } var array = GetArray(token, propName); array = new RavenJArray(array); document[propName] = array; var position = patchCmd.Position; var value = patchCmd.Value; if (position == null && (value == null || value.Type == JTokenType.Null)) throw new InvalidOperationException("Cannot remove value from '" + propName + "' because position element does not exists or not an integer and no value was present"); if (position != null && value != null && value.Type != JTokenType.Null) throw new InvalidOperationException("Cannot remove value from '" + propName + "' because both a position and a value are set"); if (position != null && (position.Value < 0 || position.Value >= array.Length)) throw new IndexOutOfRangeException("Cannot remove value from '" + propName + "' because position element is out of bounds"); if (value != null && value.Type != JTokenType.Null) { foreach (var ravenJToken in array.Where(x => RavenJToken.DeepEquals(x, value)).ToList()) { array.Remove(ravenJToken); } return; } if (position != null) array.RemoveAt(position.Value); }