public ActionResult Edit(List <PriceEditViewModel> model, string redirectUrl) { //if (!ModelState.IsValid) //{ // return View(model); //} foreach (var item in model) { if (item.Price.PriceId == 0) { Prices price = new Prices() { Value = item.Price.Value, FromDate = item.EditFromDate, ServicesId = item.ServicesId, ToDate = null, }; Price.Create(price); } else { Prices price = new Prices(); var PREV = (from s in context.Services .Include("Types") .Include("Units") select(new ConfirmEdit { ServicesId = s.ServicesId, Name = s.Name, Prices = s.Prices.Where(p => p.FromDate < item.EditFromDate && (p.ToDate == null || p.ToDate > item.EditFromDate)).OrderBy(p => p.FromDate).FirstOrDefault() })).Where(s => s.ServicesId == item.ServicesId).ToList(); var NEXT = (from s in context.Services .Include("Types") .Include("Units") select(new ConfirmEdit { ServicesId = s.ServicesId, Name = s.Name, Prices = s.Prices.Where(p => p.FromDate > item.EditFromDate && (p.ToDate == null || p.ToDate > item.EditFromDate)).FirstOrDefault() })).Where(s => s.ServicesId == item.ServicesId).ToList(); if (PREV[0].Prices != null) { Prices prev = Price.GetById(PREV[0].Prices.PriceId); prev.ToDate = item.EditFromDate; Price.Update(prev); } if (NEXT[0].Prices != null) { Prices next = Price.GetById(NEXT[0].Prices.PriceId); price.ToDate = next.FromDate; } price.Value = item.Price.Value; price.FromDate = item.EditFromDate; price.ServicesId = item.ServicesId; Price.Create(price); } } return(RedirectToLocal(redirectUrl)); }