могу ли я проецировать на другой тип условно? - PullRequest
0 голосов
/ 22 марта 2011

Если у меня есть Car, Bus и UnknownVehicle, которые происходят от Vehicle, тогда основанные на поле "Тип" в моей базе данных, могу ли я проецировать в другой тип, основанный на условии?

Как это:

public IQueryable<Vehicle> GetAllVehicles()
{
    return from vehicle in dc.Vehicles
    select vehicle.Type == "C" ? new Car(vehicle.ID) : vehicle.Type == "B" ? new Bus(vehicle.ID) : new UnknownVehicle(vehicle.ID);
}

1 Ответ

0 голосов
/ 22 марта 2011

Вы можете создать статический FactoryMethod (это шаблон) в Vehicle, который будет возвращать объект нужного вам класса.

Что-то вроде этого:

public class Vehicle
{
    ...
    public static Vehicle GetVehicle( VehicleType type, int id )
    {
        switch( type )
        {
            case 'C':
                return( new Car( id ) );
            case 'B':
                return( new Bus( id ) );
            default:
                return( new UnknownVehicle( id ) );

        }
    }
}

И использовать его вкод вроде этого

public IQueryable<Vehicle> GetAllVehicles()
{
    return( from vehicle in dc.Vehicles
        select Vehicle.GetVehicle( vehicle.Type, vehicle.ID ) );
}

Хотя для работы переключателя ваш тип должен быть char, а не string.Но вы все равно используете однобуквенные типы.

...