Esempio n. 1
0
        internal static IEnumerable <Menu> Subtract(IEnumerable <Menu> first, IEnumerable <Menu> second)
        {
            var result = new List <Menu>();

            if (second == null)
            {
                if (first != null)
                {
                    result.AddRange(first.Select(item => item.Clone()));
                }
            }
            else
            {
                if (first != null)
                {
                    var dicForbidenMenus = second.ToDictionary(item => item.Id);
                    foreach (var item in first)
                    {
                        if (dicForbidenMenus.ContainsKey(item.Id))
                        {
                            var menu = Menu.Subtract(item, dicForbidenMenus[item.Id]);
                            if (menu != null && !menu.IsEmpty)
                            {
                                result.Add(menu);
                            }
                        }
                        else
                        {
                            result.Add(item.Clone());
                        }
                    }
                }
            }
            return(result);
        }