我有一个Platform类作为基类,还有两个来自Platform的IOSPlatform和AndroidPlatform类。
除此之外,还有一个Device类,它将Platform对象作为导航属性。
在查询所有IOS平台设备时,下面的linq表达式就像魅力一样。
devices.Where(t=> t.Platform is IOSPlatform)
我希望通过动态检查类类型来改进此查询,例如:
Platform p = new IOSPlatform();
devices.Where(t=> t.Platform is /*derived class of p object*/)
有办法做到这一点吗?
最诚挚的问候,
末尔
答案 0 :(得分:4)
Platform p = new IOSPlatform();
devices.Where(t=> t.Platform.GetType()==p.GetType())
答案 1 :(得分:1)
怎么样:
Platform p = new IOSPlatform();
devices.Where(t=> t.Platform.GetType().BaseType == p.GetType());
答案 2 :(得分:1)
我不确定我理解,但听起来你想要
devices.Where(t =>
p.GetType().IsAssignableFrom(t.Platform.GetType())
);
答案 3 :(得分:0)
您是否尝试验证列表中的对象是否继承自Platform? “是”运算符已经验证了......你可以使用它:
devices.Where(d => d.Platform is Platform);
甚至使用OfType方法:
devices.OfType<IOSPlatform>();