public ActionResult MyRestaurant()
        {
            var viewModel = new RestaurantIndexData();
            var user      = this.HttpContext.User; // Here is the key!!, don't pass it in, directaly get it!!

            if (user == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            viewModel.Restaurants = db.Restaurants.Where(c => c.Email == user.Identity.Name);

            viewModel.Dishes = viewModel.Restaurants.Single().Dishes;
            return(View(viewModel));
        }
        // GET: Restaurants
        public ActionResult Index(int?id, int?DishID, int?changeNumber)
        {
            var viewModel = new RestaurantIndexData();

            viewModel.Restaurants = db.Restaurants
                                    .Include(r => r.Category)
                                    .Include(r => r.Dishes.Select(d => d.Restraurants))
                                    .OrderBy(r => r.UserName);
            viewModel.Cart = db.Cart;

            if (id != null)
            {
                ViewBag.RestaurantID = id.Value;
                viewModel.Dishes     = viewModel.Restaurants.Where(r => r.ID == id.Value).Single().Dishes;
            }

            if (DishID != null)
            {
                if (ModelState.IsValid)
                {
                    var cartItem = new CartItem();
                    var user     = this.HttpContext.User;
                    var customer = db.Customers.Where(c => c.Email == user.Identity.Name).FirstOrDefault();
                    cartItem.CustomerID   = customer.ID;
                    cartItem.DishID       = DishID ?? default(int);
                    cartItem.RestaurantID = id ?? default(int);

                    if (changeNumber == 0)  //when adding, changeNumber == 0
                    {
                        _CartService.AddToCart(cartItem);
                    }
                    else if (changeNumber == 1)     //when removing, changeNumber == 1
                    {
                        _CartService.MinFromCart(cartItem);
                    }
                    else if (changeNumber == 2)     // When canceling, changeNumber == 2
                    {
                        _CartService.CancelFromCart(cartItem);
                    }
                }
                ViewBag.DishID = DishID.Value;
                viewModel.Cart = db.Cart;
            }
            return(View(viewModel));
        }
        /*
         * // GET: Restaurant
         * public async Task<IActionResult> Index()
         * {
         *  return View(await _context.Restaurants.ToListAsync());
         * }
         * public async Task<IActionResult> Index(string searchString)
         * {
         *  ViewBag.NameSortParm = searchString == "Name" ? "name_desc" : "Name";
         *  ViewBag.AddressSortParm = searchString == "Address" ? "address_desc" : "Address";
         *  ViewBag.CitySortParm = searchString == "City" ? "city_desc" : "City";
         *  ViewBag.StateSortParm = searchString == "State" ? "state_desc" : "State";
         *  ViewBag.PhoneSortParm = searchString == "Phone" ? "phone_desc" : "Phone";
         *  ViewBag.OwnerSortParm = searchString == "OwnerName" ? "owner_desc" : "OwnerName";
         *  ViewBag.DateSortParm = searchString == "RegistrationDate" ? "date_desc" : "RegistrationDate";
         *
         *  var restaurants = from m in _context.Restaurants
         *               select m;
         *
         *  switch (searchString)
         *  {
         *      case "Name":
         *          restaurants = restaurants.OrderBy(s => s.Name);
         *          break;
         *      case "name_desc":
         *          restaurants = restaurants.OrderByDescending(s => s.Name);
         *          break;
         *      case "Address":
         *          restaurants = restaurants.OrderBy(s => s.Address);
         *          break;
         *      case "City":
         *          restaurants = restaurants.OrderBy(s => s.City);
         *          break;
         *      case "State":
         *          restaurants = restaurants.OrderBy(s => s.State);
         *          break;
         *      case "Phone":
         *          restaurants = restaurants.OrderBy(s => s.Phone);
         *          break;
         *      case "OwnerName":
         *          restaurants = restaurants.OrderBy(s => s.OwnerName);
         *          break;
         *      case "RegistrationDate":
         *          restaurants = restaurants.OrderBy(s => s.RegistrationDate);
         *          break;
         *      default:
         *          restaurants = restaurants.OrderBy(s => s.Name);
         *          break;
         *  }
         *
         *  if (!String.IsNullOrEmpty(searchString))
         *  {
         *      restaurants = restaurants.Where(s => s.Name.Contains(searchString));
         *  }
         *
         *  return View(await restaurants.ToListAsync());
         * }*/
        public IActionResult Index(int?id, int?plateID, string searchString)
        {
            ViewBag.CurrentFilter = searchString;

            var viewModel = new RestaurantIndexData();

            viewModel.Restaurants = _context.Restaurants
                                    .OrderBy(i => i.Name);

            if (!String.IsNullOrEmpty(searchString))
            {
                viewModel.Restaurants = _context.Restaurants
                                        .Where(s => s.Name.Contains(searchString));
            }
            else if (id != null)
            {
                ViewBag.RestaurantID = id.Value;
                // Lazy loading
                //
                //viewModel.Serves = viewModel.Serves.Where(
                //    i => i.RestaurantID == id.Value);
                var selectedRestaurant = viewModel.Restaurants.Where(x => x.ID == id).Single();
                _context.Entry(selectedRestaurant).Collection(x => x.Serves).Load();
                foreach (Serve serve in selectedRestaurant.Serves)
                {
                    _context.Entry(serve).Reference(x => x.Plate).Load();
                }

                viewModel.Serves = selectedRestaurant.Serves;
            }

            /*
             * if (plateID != null)
             * {
             *  ViewBag.PlateID = plateID.Value;
             *  viewModel.Serves = viewModel.Serves.Where(
             *      x => x.PlateID == plateID);
             * }*/
            return(View(viewModel));
        }