Reduce logic in Web API controller
To clean up your controller I came up with this:


entire logic is moved to your CarService
method CarModelsToRemoveFromDb is also moved to CarService
CarServicehas two overloads for method Update


Methods for CarService:

private IEnumerable&lt;string&gt; CarModelsToRemoveFromDb (Car car, IEnumerable&lt;string&gt; splitSelectedCars)
{
    var savedCarsInDb = car.CarModels.Select(c=&gt; c.ModelId)
        .ToList();

    return savedCarsInDb.Except(splitSelectedCars, StringComparer.OrdinalIgnoreCase);
}

public void Update(CarModelSelectViewModel model)
{
    var car = GetById(model.carId);
    var splitSelectedCars = model.SelectedCars.Split(',').Select(sValue =&gt; sValue.Trim()).ToList();

    if (car.CarModels.Count &gt; 0)
    {
        var carsToRemove = CarModelsToRemoveFromDb(car, splitSelectedCars);

        foreach (var carToRemove in carsToRemove )
        {
            var carIdToDelete = car.RemoveCar(carToRemove);
            Delete(carIdToDelete);
        }
    }

    foreach (var singleSelectedCar in splitSelectedCars)
    {
        var savedCarsInDb = car.CarModels.Select(c=&gt; c.ModelId)
            .ToList();

        if (!savedCarsInDb.Contains(singleSelectedCar))
        {
            riskAppraisal.AddCar(singleSelectedCar);
        }
    }

    Update(car);
}

public void Update(Car car)
{
    //your current logic
}


Controller:

public HttpResponseMessage SaveCarModelSelect(CarModelSelectViewModel model)
{
    _carService.Update(model);
    return Request.CreateResponse(HttpStatusCode.OK);
}


Logic that checks count of Car (car.CarModels.Count &gt; 0) can also be separated out to private method, same for loop foreach (var singleSelectedCar in splitSelectedCars).

I hope it can give you some sense of direction.