Linq技巧2——限制返回数据中的继承类型_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > Linq技巧2——限制返回数据中的继承类型

Linq技巧2——限制返回数据中的继承类型

 2013/10/26 14:45:01  欣静赏悦  博客园  我要评论(0)
  • 摘要:假如有像下面这样的一个模型,怎样在查询时仅仅需要的Cars呢?这样的几个继承关系的实体中,查询时Where条件可以加入OfType<SubType>(),你可以这样来写:varonlyCars=fromcarinctx.Vehicles.OfType<Car>()selectcar;这样查询正常工作,很好!这样限制了Cars类型,偶尔带出SportsCarsandSUVs这些子类型。怎样在查询时仅仅需要的Cars,且不包括那些子类呢?假如你预期仅仅查询一辆简单的家庭用车
  • 标签:继承 数据 技巧 限制

  假如有像下面这样的一个模型,

      

  怎样在查询时仅仅需要的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;

 

 

 

 

上一篇: 诺基亚:汽车可能是我们的未来 下一篇: 没有下一篇了!
发表评论
用户名: 匿名