假如有像下面这样的一个模型,
怎样在查询时仅仅需要的Cars呢?
这样的几个继承关系的实体中,查询时Where 条件可以加入OfType<SubType>(),你可以这样来写:
var onlyCars = from car in ctx.Vehicles.OfType<Car>() select car;
这样查询正常工作,很好!这样限制了Cars 类型,偶尔带出SportsCars and SUVs 这些子类型。
怎样在查询时仅仅需要的Cars,且不包括那些子类呢?
假如你预期仅仅查询一辆简单的家庭用车,这以为着你不想在查询中看见SportsCars and SUVs 这些子类型。
现在为了避免查询那些子类型,就必须在查询中明确一下条件。
var onlyCars = from car in ctx.Vehicles.OfType<Car>() where !(car is SportsCar) && !(car is SUV) select car;
现在查询出来的仅仅是Cars 了。
号外
很不幸的是这种方式,你必须清晰地找出所有你不想要的可能存在的子类型,难免会存在大量或者更深继承的子类。
如果这种方式被支持,无疑是更优雅的方式(很不幸,它不被支持)。
var onlyCars = from car in ctx.Vehicles.OfType<Car>() where car.GetType() == typeof(Car) select car;