public IList <RouteMenuItem> GetTopLevelMenus(MenuParentFilter <int?, string> parentFilter) { //TODO:think about rightness of this act parentFilter.InitHierarchy = false; parentFilter.ParentId = null; return(GetRouteMenuItems(parentFilter).AsEnumerable().Select(it => new RouteMenuItem { Id = it.Id, Name = it.Name, RouteName = it.RouteName, RouteParams = it.RouteParams?.ToDictionary(kv => kv.Name, kv => kv.Value), ParentId = it.ParentId }).ToList()); //return (from menu in Db.Set<MenuItem>() // join menuRelation in Db.Set<RoleMenuItemRelation>() on menu.Id equals menuRelation.MenuItemId // join menuItemRelationGroup in Db.Set<MenuItemRelationGroup>() on menuRelation.MenuItemRelationGroupId // equals menuItemRelationGroup.Id // join routeName in Db.Set<RouteName>() on menuRelation.RouteNameId equals routeName.Id // let routeParams = Enumerable.ToDictionary((from entity in Db.Set<MenuItemRelationRouteValue>() // join routeParam in Db.Set<RouteParam>() on entity.RouteParamId equals routeParam.Id // where entity.MenuItemRelationId == menuRelation.Id // select new { Key = routeParam.Name, Value = entity.Value } // ), it => it.Key, it => it.Value) // where menuItemRelationGroup.Name == filter.MenuItemGroup && menu.ParentId == null // select new { menu, routeName, routeParams }).ToList().Select(it => new RouteMenuItem // { // Id = it.menu.Id, // RouteName = it.routeName.Name, // ParentId = it.menu.ParentId, // Name = it.menu.Name, // RouteParams = it.routeParams // }).ToList(); }
public List <RouteMenuItem> GetSubMenus(MenuParentFilter <int?, string> parentFilter) { if (!parentFilter.ParentId.HasValue) { throw new ArgumentNullException("filter.ParentId"); } return(GetRouteMenuItems(parentFilter).ToList().Select(it => new RouteMenuItem { Id = it.Id, RouteName = it.RouteName, ParentId = it.ParentId, Name = it.Name, RouteParams = it.RouteParams.ToDictionary(it2 => it2.Name, it2 => it2.Value) }).ToList()); //GetSubMenus(filter.ParentId.Value); }
//TODO:Extract //public IList<Good> GetGoodList(int menuID) //{ // return (from menuGoods in Db.Set<MenuGood>() // join good in Db.Set<Good>() on menuGoods.GoodId equals good.Id // where menuID == menuGoods.MenuId // select good).ToList(); //} //public IList<Good> GetGoodList(MenuItem menu) //{ // return GetGoodList((int) menu.Id); //} //public Task<IList<Good>> GetGoodListAsync(int menuID) //{ // return Task<IList<Good>>.Factory.StartNew(() => GetGoodList(menuID)); //} //public Task<IList<Good>> GetGoodListAsync(MenuItem menu) //{ // return Task<IList<Good>>.Factory.StartNew(() => GetGoodList(menu)); //} public List <RouteMenuItem> GetLayoutRelatedMenus(MenuParentFilter <int?, string> parentFilter) { return(GetRouteMenuItems(parentFilter).AsEnumerable().Select(it => new RouteMenuItem { Id = it.Id, Name = it.Name, RouteName = it.RouteName, RouteParams = it.RouteParams.ToDictionary(kv => kv.Name, kv => kv.Value), ParentId = it.ParentId }).ToList()); //(from menu in Db.Set<MenuItem>() //join menuRelation in Db.Set<UserMenuItemRelation>() on menu.Id equals menuRelation.MenuItemId //join menuItemRelationGroup in Db.Set<MenuItemRelationGroup>() on menuRelation.MenuItemRelationGroupId // equals menuItemRelationGroup.Id //join routeName in Db.Set<RouteName>() on menuRelation.RouteNameId equals routeName.Id //let routeParams = (from entity in Db.Set<MenuItemRelationRouteValue>() // join routeParam in Db.Set<RouteParam>() on entity.RouteParamId equals routeParam.Id // where entity.MenuItemRelationId == menuRelation.Id // select new { Key = routeParam.Name, Value = entity.Value } // ) //where menuItemRelationGroup.Name == filter.MenuItemGroup //select new { menu, routeName, routeParams }).ToList().Select(it => new RouteMenuItem // { // Id = it.menu.Id, // RouteName = it.routeName.Name, // ParentId = it.menu.ParentId, // Name = it.menu.Name, // RouteParams = it.routeParams.ToDictionary(it2 => it2.Key, it2 => it2.Value) //}).ToList(); //return (from menu in Db.Set<MenuItem>() // join menuRelation in Db.Set<MenuItemRelation>() on menu.Id equals menuRelation.MenuItemId // join menuItemRelationGroup in Db.Set<MenuItemRelationGroup>() on menuRelation.MenuItemRelationGroupId // equals menuItemRelationGroup.Id // where menuItemRelationGroup.Name == filter.MenuItemGroup // select menu).ToList().Select(it => new RouteMenuItem // { // }).ToList(); }
public IList <RouteMenuItem> GetTopLevelMenus(MenuParentFilter <int?, string> parentFilter) { //TODO:think about rightness of this act parentFilter.InitHierarchy = false; parentFilter.ParentId = null; try { var result = GetRouteMenuItems(parentFilter).AsEnumerable().Select(it => new RouteMenuItem { Id = it.Id, Name = it.Name, RouteName = it.RouteName, RouteParams = it.RouteParams?.ToDictionary(kv => kv.Name, kv => kv.Value), ParentId = it.ParentId }).ToList(); return(result); } catch (Exception ex) { LogEventManager.Logger.Error(ex.Message, ex); throw; } }
public IEnumerable <RouteMenuItem> GetMenuItems(MenuParentFilter <int?, string> parentFilter) { var result = new List <RouteMenuItem>(); foreach (var ri in GetRouteMenuItems(parentFilter)) { var item = new RouteMenuItem { Id = ri.Id, Name = ri.Name, RouteName = ri.RouteName, RouteParams = ri.RouteParams.ToDictionary(kv => kv.Name, kv => kv.Value), ParentId = ri.ParentId }; parentFilter.ParentId = ri.Id; if (parentFilter.InitHierarchy) { item.Children = GetMenuItems(parentFilter); } result.Add(item); } return(result); }
protected IQueryable <RouteQueryResult> GetRouteMenuItems(MenuParentFilter <int?, string> parentFilter) { var realFilter = parentFilter as UserBasedMenuParentFilter <int?, int?, string>; var filterHasValue = realFilter != null; var query = (from menuItemRelation in Db.Set <UserMenuItemRelation>() join menuItem in Db.Set <MenuItem>() on menuItemRelation.MenuItemId equals menuItem.Id join routeName in Db.Set <RouteName>() on menuItemRelation.RouteNameId equals routeName.Id join menuItemRelationGroup in Db.Set <MenuItemRelationGroup>() on menuItemRelation.MenuItemRelationGroupId equals menuItemRelationGroup.Id //from menuItemRouteValue in tmprelationRouteValues.DefaultIfEmpty() //join routeParam in Db.Set<RouteParam>() on menuItemRouteValue.RouteParamId equals routeParam.Id into // tmpRouteParams // from routeParam in tmpRouteParams.DefaultIfEmpty() where !filterHasValue || (filterHasValue && realFilter.ParentId == menuItem.ParentId && (!menuItemRelation.UserId.HasValue || menuItemRelation.UserId == realFilter.UserId) && (string.IsNullOrEmpty(parentFilter.MenuItemGroup) || (!string.IsNullOrEmpty(parentFilter.MenuItemGroup) && menuItemRelationGroup.Name == parentFilter.MenuItemGroup))) && menuItem.IsActive select new { menuItemRelation, menuItem, routeName }); var menuItemRelationsQuery = from menuItemRouteValue in Db.Set <MenuItemRelationRouteValue>() join routeParam in Db.Set <RouteParam>() on menuItemRouteValue.RouteParamId equals routeParam.Id select new { routeParam, menuItemRouteValue }; var query2 = from q in query join menuItemRouteValue in menuItemRelationsQuery on q.menuItemRelation.Id equals menuItemRouteValue.menuItemRouteValue.MenuItemRelationId into tmprelationRouteValues from menuItemRouteValue in tmprelationRouteValues.DefaultIfEmpty() select new { q.routeName, q.menuItem, menuItemRouteValue }; var query3 = (from q in query2 group new { q.menuItemRouteValue, q.menuItem, q.routeName } by new { q.menuItem.Id, q.menuItem.ParentId, MenuItemName = q.menuItem.Name, RouteName = q.routeName.Name, SortOrder = q.menuItem.SortOrder } into tmp select new RouteQueryResult { Id = tmp.Key.Id, Name = tmp.Key.MenuItemName, RouteName = tmp.Key.RouteName, RouteParams = tmp.Where(it => it.menuItemRouteValue != null && it.menuItemRouteValue.routeParam != null && it.menuItemRouteValue.routeParam.Name != null).Select(it => new RouteParameterPair { Name = it.menuItemRouteValue.routeParam.Name, Value = it.menuItemRouteValue.menuItemRouteValue.Value }).Distinct(), // .Select(it => new {Key = it.routeParam.Name, Value = it.menuItemRouteValue.Value}), ParentId = tmp.Key.ParentId, // UserId = userId, SortOrder = tmp.Key.SortOrder }).OrderBy(it => it.SortOrder); return(query3); //var query = (from menuItemRelation in Db.Set<UserMenuItemRelation>() // join menuItem in Db.Set<MenuItem>() on menuItemRelation.MenuItemId equals menuItem.Id // join routeName in Db.Set<RouteName>() on menuItemRelation.RouteNameId equals routeName.Id // join menuItemRelationGroup in Db.Set<MenuItemRelationGroup>() on menuItemRelation.MenuItemRelationGroupId equals menuItemRelationGroup.Id // join menuItemRouteValue in Db.Set<MenuItemRelationRouteValue>() // on menuItemRelation.Id equals menuItemRouteValue.MenuItemRelationId into tmprelationRouteValues // from menuItemRouteValue in tmprelationRouteValues.DefaultIfEmpty() // join routeParam in Db.Set<RouteParam>() on menuItemRouteValue.RouteParamId equals routeParam.Id into // tmpRouteParams // from routeParam in tmpRouteParams.DefaultIfEmpty() // where !filterHasValue || // (filterHasValue && realFilter.ParentId == menuItem.ParentId && // (!menuItemRelation.UserId.HasValue || menuItemRelation.UserId == realFilter.UserId) && // (string.IsNullOrEmpty(parentFilter.MenuItemGroup) || (!string.IsNullOrEmpty(parentFilter.MenuItemGroup) && menuItemRelationGroup.Name == parentFilter.MenuItemGroup))) && // menuItem.IsActive // group new { menuItemRouteValue, menuItem, routeName, routeParam } by // new // { // menuItem.Id, // menuItem.ParentId, // MenuItemName = menuItem.Name, // RouteName = routeName.Name, // SortOrder = menuItem.SortOrder // } // into tmp // select new RouteQueryResult // { // Id = tmp.Key.Id, // Name = tmp.Key.MenuItemName, // RouteName = tmp.Key.RouteName, // RouteParams = // tmp.Where(it => it.routeParam != null && it.routeParam.Name != null).Select(it => new RouteParameterPair // { // Name = it.routeParam.Name, // Value = it.menuItemRouteValue.Value // }).Distinct(), // // .Select(it => new {Key = it.routeParam.Name, Value = it.menuItemRouteValue.Value}), // ParentId = tmp.Key.ParentId, // // UserId = userId, // SortOrder = tmp.Key.SortOrder // }).OrderBy(it => it.SortOrder); //return query; //.ToDictionary(it => it.routeParam.Name, it => it.menuItemRouteValue.Value) }
public Task <List <RouteMenuItem> > GetSubMenusAsync(MenuParentFilter <int?, string> parentFilter) { return(Task <List <RouteMenuItem> > .Factory.StartNew(() => GetSubMenus(parentFilter))); }
public Task <IEnumerable <RouteMenuItem> > GetMenuItemsAsync(MenuParentFilter <int?, string> parentFilter) { return(Task <IEnumerable <RouteMenuItem> > .Factory.StartNew(() => GetMenuItems(parentFilter))); }