我可以有条件地投射到不同的类型吗?

时间:2011-03-22 07:29:28

标签: linq-to-sql inheritance projection

如果我有CarBusUnknownVehicle派生自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 :(得分:0)

您可以在Vehicle上创建一个静态FactoryMethod(它是一个模式),它将返回您需要的类的对象。

类似的东西:

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 ) );
}

虽然为了切换工作,你的Type应该是char,而不是string。但无论如何你都使用单字母类型。