Чем заменить if-else/switch-case при генерации объекта-наследника?

Доброго времени суток.

Имею БД СТО и программу которая с ней работает. Среди классов, отражающих сущности БД есть Car, который имеет несколько наследников: LuxuryCar, SportCar и т.д, а также поле типа CarType, отражающее какому типу машины относится данный экземпляр Car. При обращении к БД через Entity Framework я хочу получать список машин определенного CarType, сейчас это реализовано с использованием if-else, но я уверен, есть решение, которое позволит избавиться от if-else или switch-case

Код генерации списков:

public List<Car> GetCarsTypeOF(string carType)
{
    List<Car> cars;
    var db = new STOContext();

    if (carType == "LuxuryCar")
    {
        cars = db.Cars
            .Where(c => c.CarType
            .Equals(new LuxuryCar().GetType()))
            .ToList();
    }
    else if (carType == "MinivanCar")
    {
        cars = db.Cars
            .Where(c => c.CarType
            .Equals(new MinivanCar().GetType()))
            .ToList();
    }
    else if (carType == "SUV")
    {
        cars = db.Cars
            .Where(c => c.CarType
            .Equals(new SUV().GetType()))
            .ToList();
    }
    else if (carType == "SportCar")
    {
        cars = db.Cars
            .Where(c => c.CarType
            .Equals(new SportCar().GetType()))
            .ToList();
    }
    else
    {
        throw new Exception();
    }

    return cars;
}

PS: если что то не так с оформлением вопроса или нужна еще информация - вопрос дополню


Ответы (0 шт):