public static ParameterMap AddParameterLinks(this ParameterMap parameterMap, IEnumerable <IParameterLink> parameterLinks, bool merge = true) { if (parameterMap == null) { return(null); } if (parameterMap.Type == null || parameterLinks == null || parameterLinks.Count() == 0) { return(parameterMap); } IEnumerable <PropertyInfo> propertyInfos = Query.MapPropertyInfos(parameterMap.Type); if (propertyInfos == null) { return(parameterMap); } ParameterMap clonedMap = parameterMap.ShallowClone(); if (clonedMap.ParameterLinks == null) { clonedMap.ParameterLinks = new List <IParameterLink>(); } else { clonedMap.ParameterLinks = new List <IParameterLink>(parameterMap.ParameterLinks); } foreach (IParameterLink parameterLink in parameterLinks) { Type linkType = parameterLink.GetType(); IParameterLink existingLink = clonedMap.ParameterLinks.Find(x => x.PropertyName == parameterLink.PropertyName && x.GetType() == linkType); if (existingLink == null) { clonedMap.ParameterLinks.Add(parameterLink); } else { clonedMap.ParameterLinks.Remove(existingLink); if (merge) { IParameterLink newLink = existingLink.ShallowClone(); newLink.ParameterNames = new HashSet <string>(existingLink.ParameterNames); newLink.ParameterNames.UnionWith(parameterLink.ParameterNames); clonedMap.ParameterLinks.Add(newLink); } else { clonedMap.ParameterLinks.Add(parameterLink); } } } return(clonedMap); }
public static ParameterMap RemoveParameterLinks(this ParameterMap parameterMap, IEnumerable <string> propertyNames) { if (parameterMap == null) { return(null); } if (parameterMap.Type == null || parameterMap.ParameterLinks == null || propertyNames == null || propertyNames.Count() == 0) { return(parameterMap); } ParameterMap clonedMap = parameterMap.ShallowClone(); clonedMap.ParameterLinks = parameterMap.ParameterLinks.Where(x => propertyNames.All(y => x.PropertyName != y)).ToList(); return(clonedMap); }