private void _removeFilter(CswNbtViewEditorData Return) { Dictionary <string, CswNbtViewPropertyFilter> filtersToRemove = new Dictionary <string, CswNbtViewPropertyFilter>(); Collection <ICswNbtMetaDataProp> propsToRemove = new Collection <ICswNbtMetaDataProp>(); CswNbtViewRoot.forEachProperty eachProperty = prop => { foreach (CswNbtViewPropertyFilter filter in prop.Filters) { if (filter.TextLabel == Request.FilterToRemove.TextLabel) { if (prop.ShowInGrid || prop.Filters.Count > 1) //if ShowInGrid == true, just remove the filter { filtersToRemove.Add(prop.UniqueId, filter); } else //otherwise, remove the property as well { ICswNbtMetaDataProp propToRemove; if (prop.Type.Equals(CswEnumNbtViewPropType.ObjectClassPropId)) { propToRemove = _CswNbtResources.MetaData.getObjectClassProp(prop.ObjectClassPropId); } else { propToRemove = _CswNbtResources.MetaData.getNodeTypeProp(prop.NodeTypePropId); } if (null != propToRemove) { propsToRemove.Add(propToRemove); } } } } }; CurrentView.Root.eachRelationship(null, eachProperty); foreach (var propAndFilter in filtersToRemove) { CswNbtViewProperty prop = (CswNbtViewProperty)CurrentView.FindViewNodeByUniqueId(propAndFilter.Key); prop.removeFilter(propAndFilter.Value); } foreach (ICswNbtMetaDataProp propToRemove in propsToRemove) { CurrentView.removeViewProperty(propToRemove); } _getFilters(Return, CurrentView); HashSet <string> seenRels = new HashSet <string>(); CswNbtViewRoot.forEachRelationship eachRelationship = relationship => { if (false == seenRels.Contains(relationship.TextLabel)) { seenRels.Add(relationship.TextLabel); Return.Step4.Relationships.Add(relationship); } }; CurrentView.Root.eachRelationship(eachRelationship, null); Return.Step4.ViewJson = CswConvert.ToString(CurrentView.ToJson()); }