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)));
 }