private MenuModel GenerateMenuModel(IEnumerable <MenuLinkItem> items) { if (_sessionCache.TryGet(_key, out MenuModel cachedMenuModel)) { return (cachedMenuModel); } var menuModel = new MenuModel(); // Проходим по дереву до подменю и генерируем ссылку, на которую будет ссылаться элемент главного меню menuModel.MenuItems.AddRange(items .Where(c => c.ParentId == 0 && (!c.Roles.Any() || c.Roles.Any(r => _userService.CurrentUserRole == r))) .Select(t => GenerateSubMenuModel(items, t)).Where(t => t != null)); _sessionCache.AddOrReplace(_key, menuModel); return(menuModel); }