public IList <RouteMenuItem> GetMenusByNavigation(Navigation navigationGeneric, int quantity = 5, bool onlyIsActive = true) { var paramQuery = (from entity in Db.Set <MenuItemRelationRouteValue>() join routeParam in Db.Set <RouteParam>() on entity.RouteParamId equals routeParam.Id group new { entity, routeParam } by new { entity.MenuItemRelationId } into tmp select new { tmp.Key.MenuItemRelationId, RouteParams = tmp.ToDictionary(it => it.routeParam.Name, it => it.entity.Value) }); if (navigationGeneric.RouteParameters != null && navigationGeneric.RouteParameters.Any()) { paramQuery = navigationGeneric.RouteParameters.Aggregate(paramQuery, (current, item) => current.Where(it => it.RouteParams.Any(it2 => it2.Key == item.Key && it2.Value == (string)item.Value))); // paramQuery = navigationGeneric.RouteParameters.Aggregate(paramQuery, (current, item) => current.Where(it => it.Value == (string)item.Value && it.RouteParam.Name == item.Key)); } // var selectedMiQuery = paramQuery.Select(it => it.MenuItemRelationId).Distinct(); var result = (from menuItem in Db.Set <MenuItem>() join menuItemRelation in Db.Set <UserMenuItemRelation>() on menuItem.Id equals menuItemRelation.MenuItemId //join menuItemRelationGroup in Db.Set<MenuItemRelationGroup>() on menuRelation.MenuItemRelationGroupId equals menuItemRelationGroup.Id join routeName in Db.Set <RouteName>() on menuItemRelation.RouteNameId equals routeName.Id join routeParam in paramQuery on menuItemRelation.Id equals routeParam.MenuItemRelationId where navigationGeneric.RouteName == routeName.Name select new RouteMenuItem { Id = menuItem.Id, RouteName = routeName.Name, ParentId = menuItem.ParentId, Name = menuItem.Name, UserId = menuItemRelation.UserId, RouteParams = routeParam.RouteParams }); return(result.ToList()); }
public Task <IList <RouteMenuItem> > GetMenusByNavigationAsync(Navigation navigationGeneric, int quantity = 5, bool onlyIsActive = true) { return (Task <IList <RouteMenuItem> > .Factory.StartNew( () => GetMenusByNavigation(navigationGeneric, quantity, onlyIsActive))); }
public IList <RouteMenuItem> GetMenusByNavigation(Navigation navigationGeneric, int quantity = 5, bool onlyIsActive = true) { try { var paramQuery = (from entity in Db.Set <MenuItemRelationRouteValue>() join routeParam in Db.Set <RouteParam>() on entity.RouteParamId equals routeParam.Id group new { entity, routeParam } by new { entity.MenuItemRelationId } into tmp select new { tmp.Key.MenuItemRelationId, RouteParams = tmp.ToDictionary(it => it.routeParam.Name, it => it.entity.Value) }); if (navigationGeneric.RouteParameters != null && navigationGeneric.RouteParameters.Any()) { paramQuery = navigationGeneric.RouteParameters.Aggregate(paramQuery, (current, item) => current.Where(it => it.RouteParams.Any(it2 => it2.Key == item.Key && it2.Value == (string)item.Value))); // paramQuery = navigationGeneric.RouteParameters.Aggregate(paramQuery, (current, item) => current.Where(it => it.Value == (string)item.Value && it.RouteParam.Name == item.Key)); } // var selectedMiQuery = paramQuery.Select(it => it.MenuItemRelationId).Distinct(); var result = (from menuItem in Db.Set <MenuItem>() join menuItemRelation in Db.Set <RoleMenuItemRelation>() on menuItem.Id equals menuItemRelation.MenuItemId //join menuItemRelationGroup in Db.Set<MenuItemRelationGroup>() on menuRelation.MenuItemRelationGroupId equals menuItemRelationGroup.Id join routeName in Db.Set <RouteName>() on menuItemRelation.RouteNameId equals routeName.Id join routeParam in paramQuery on menuItemRelation.Id equals routeParam.MenuItemRelationId where navigationGeneric.RouteName == routeName.Name select new RouteMenuItem { Id = menuItem.Id, RouteName = routeName.Name, ParentId = menuItem.ParentId, Name = menuItem.Name, RoleId = menuItemRelation.RoleId, RouteParams = routeParam.RouteParams }); return(result.ToList()); //return result; //var query = (from menuItem in Db.Set<MenuItem>() // join menuItemRelation in Db.Set<RoleMenuItemRelation>() on menuItem.Id equals // menuItemRelation.MenuItemId // //join menuItemRelationGroup in Db.Set<MenuItemRelationGroup>() on menuRelation.MenuItemRelationGroupId equals menuItemRelationGroup.Id // join routeName in Db.Set<RouteName>() on menuItemRelation.RouteNameId equals routeName.Id // where navigationGeneric.RouteName == routeName.Name // select new // { // MenuItemId = menuItem.Id, // MenuItemName = menuItem.Name, // RouteName = routeName.Name, // MenuItemRelationId = menuItemRelation.Id, // menuItemRelation.RoleId, // ParentId = menuItem.ParentId // }).Distinct(); //if (navigationGeneric.RouteParameters != null && navigationGeneric.RouteParameters.Any()) //{ // query = (from item in query // join entity in Db.Set<MenuItemRelationRouteValue>() on item.MenuItemRelationId equals // entity.MenuItemRelationId // join routeParam in Db.Set<RouteParam>() on entity.RouteParamId equals routeParam.Id // group new // { // item.MenuItemId, // item.MenuItemName, // item.MenuItemRelationId, // item.ParentId, // item.RouteName, // item.RoleId, // entity, // routeParam // } by // new // { // item.MenuItemId, // item.MenuItemName, // item.MenuItemRelationId, // item.ParentId, // item.RouteName, // item.RoleId // } into tmp // select new RouteMenuItem // { // Id = tmp.Key.MenuItemId, // RouteName = tmp.Key.RouteName, // ParentId = tmp.Key.ParentId, // Name = tmp.Key.MenuItemName, // RoleId = tmp.Key.RoleId, // RouteParams = navigationGeneric.RouteParameters.Aggregate(tmp.ToDictionary(it=>it.entity.Value,it=>it.routeParam.Name), (current, routeParameter) => current.Where(it => it.Key == routeParameter.Key && it.Value == routeParameter.Value)); // }); //} //var res = new List<RouteMenuItem>(); // foreach (var item in query) // { // var q = (from entity in Db.Set<MenuItemRelationRouteValue>() // join routeParam in Db.Set<RouteParam>() on entity.RouteParamId equals routeParam.Id // where entity.MenuItemRelationId == item.MenuItemRelationId // select new {Key = routeParam.Name, Value = entity.Value}); // //if (q.Any()) // //{ // // q = navigationGeneric.RouteParameters.Aggregate(q, (current, routeParameter) => current.Where(it => it.Key == routeParameter.Key && it.Value == routeParameter.Value)); // //} // res.Add(new RouteMenuItem // { // Id = item.MenuItemId, // RouteName = item.RouteName, // ParentId = item.ParentId, // Name = item.MenuItemName, // RoleId = item.RoleId, // RouteParams = q.Any() ? q.ToDictionary(it2 => it2.Key, it2 => it2.Value) : null// routeQ.Where(it=>it.MenuItemRelationId ==item.MenuItemRelationId).ToDictionary(it2 => it2.Key, it2 => it2.Value) // }); // } // return res; //group new //{ // menuItem, // routeName, // menuItemRelation.RoleId, // tmpQ //} by // new // { // MenuItemId = menuItem.Id, // MenuItemName = menuItem.Name, // RouteName = routeName.Name, // menuItemRelation.RoleId, // ParentId = menuItem.ParentId // } into tmp //select new RouteMenuItem //{ // Id = tmp.Key.MenuItemId, // RouteName = tmp.Key.RouteName, // ParentId = tmp.Key.ParentId, // Name = tmp.Key.MenuItemName, // RoleId = tmp.Key.RoleId, // RouteParams = tmp.Where(it=>it.).ToDictionary(it2 => it2.Key, it2 => it2.Value) //}); //query = navigationGeneric.RouteParameters.Aggregate(query, // (current, routeParam) => // current.Where( // it => // it.RouteParams != null && // it.RouteParams.Any(it2 => it2.Key == routeParam.Key && it2.Value == routeParam.Value))); //var result = query.AsEnumerable().Select(it => new RouteMenuItem //{ // Id = it.menuItem.Id, // RouteName = it.routeName.Name, // ParentId = it.menuItem.ParentId, // Name = it.menuItem.Name, // RoleId = it.RoleId, // RouteParams = it.tmpQ.ToDictionary(it2 => it2.Key, it2 => it2.Value) //}).ToList(); //return result; } catch (Exception ex) { LogEventManager.Logger.Error(ex.Message, ex); throw; } }