2011-03-22 73 views
0

如果我有一个Car,BusUnknownVehicleVehicle派生,然后基于我的数据库中的“类型”字段,我可以投射到一个不同的类型基于条件?我可以有条件地投射到不同的类型吗?

像这样:

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

回答

0

您可以创建一个静态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)); 
} 

虽然交换机在工作中,你的方式须是char,不串。但是,无论如何,您都使用单字母类型。

+0

感谢您的回复。是的,在内联条件之前,我有这样的事情。但是[switch语句]不会转换为SQL(L2S异常) – 2011-03-22 08:01:48

+0

好吧,只要你使用Linq2Sql作为ORM,我认为你不能直接管理你想要的东西。 L2S需要实体到表的映射。 – Kaerber 2011-03-22 08:24:57

+0

您可以将Vehicle作为容器类,将Car/Bus/UnknownVehicle作为包含的类/策略来处理不同类型的车辆之间的不同行为。 – Kaerber 2011-03-22 08:26:18

相关问题