Linq C中派生类类型的动态检查

时间:2012-08-21 18:52:46

标签: c# linq entity-framework entity-framework-4

我有一个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*/) 

有办法做到这一点吗?

最诚挚的问候,

末尔

4 个答案:

答案 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>();