2013-02-05 128 views
2

我想获得具有这样特定类型的E对象主机对象的对象:获取某些类型的

return Session.Query<Host>().Where(x => x.E is B).ToList(); 

这似乎并不可能是工作,因为E是A型和B从A继承遗产可能是问题。一些更(简体)的详细信息:

class Host 
{ 
    public A E { get; set; } 
} 

class B : A 
{ 

} 

任何想法,为什么上述不起作用?谢谢。

PS:

请注意,上面的应该工作 - 我使用了错误的类名!

+1

当你说:“这似乎并没有工作”,你说你的返回列表中包含'和'E's是Host's *不是*'B's? – AakashM

+0

我知道数据库包含2个Host对象和一个E对象具有B类型对象的Host对象。上面的Linq查询返回0个元素。 – cs0815

+0

也许是一个愚蠢的问题,但是如果你从数据库中检索两个对象,就是'.E' a'B'?也许数据库不能恢复这些信息。 – Rawling

回答

1
return Session.Query<Host>().Where(x => x.E.GetType().Equals(typeof(B)).ToList(); 

这个代码在LinqPad:

void Main() 
{ 
    var x = new Host { E = new B() }; 

    Console.Write(x.E.GetType().Equals(typeof(B))); 
} 

class A { } 
class B : A { } 
class Host { public A E { get; set; } } 
+0

我得到了一些模糊性错误... – cs0815

+0

发表我的LinqPad测试...如果这不是在您的项目中工作,请考虑你的问题的完整性 –

+0

好吧,你缺少一个支架...将立即检查。 – cs0815