private static object GetTabModulesCallback(CacheItemArgs cacheItemArgs) { var tabModules = new List<TabModule>(); var portalId = (int)cacheItemArgs.ParamList[0]; var desktopModule = (DesktopModuleInfo)cacheItemArgs.ParamList[1]; var tabController = new TabController(); var tabsWithModule = tabController.GetTabsByPackageID(portalId, desktopModule.PackageID, false); var allPortalTabs = tabController.GetTabsByPortal(portalId); IDictionary<int, TabInfo> tabsInOrder = new Dictionary<int, TabInfo>(); //must get each tab, they parent may not exist foreach (var tab in allPortalTabs.Values) { AddChildTabsToList(tab, ref allPortalTabs, ref tabsWithModule, ref tabsInOrder); } foreach (var tab in tabsInOrder.Values) { tabModules.AddRange( tab.ChildModules.Values.Where( childModule => childModule.DesktopModuleID == desktopModule.DesktopModuleID) .Select(childModule => new TabModule { TabInfo = tab, ModuleInfo = childModule, ModuleVersion = desktopModule.Version })); } return tabModules; }