Linq技巧

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

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

      

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

 

 

 


出处:http://www.cnblogs.com/windy2008
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值