public RouteMenuItem GetParentMenu(MenuChildFilter <int?, string> filter) { //TODO: refactor in protected IQuerible var realFilter = filter as ChildUserBasedFilter <int?, int?, string>; if (realFilter == null) { return(null); } return((from childMenu in Db.Set <MenuItem>() join menu in Db.Set <MenuItem>() on childMenu.ParentId equals menu.Id 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 realFilter.ChildId == childMenu.Id && (string.IsNullOrEmpty(realFilter.MenuItemGroup) || realFilter.MenuItemGroup == menuItemRelationGroup.Name) && realFilter.UserId == menuRelation.UserId select new { menu, menuRelation, routeName, routeParams }).ToList().Select(it => new RouteMenuItem { Id = it.menu.Id, RouteName = it.routeName.Name, ParentId = it.menu.ParentId, Name = it.menu.Name, UserId = it.menuRelation.UserId, RouteParams = it.routeParams.ToDictionary(it2 => it2.Key, it2 => it2.Value) }).FirstOrDefault()); }
public Task <RouteMenuItem> GetParentMenuAsync(MenuChildFilter <int?, string> filter) { return(Task <RouteMenuItem> .Factory.StartNew(() => GetParentMenu(filter))); }