示例#1
0
        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);
        }
示例#2
0
        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);
        }