2013-02-05 153 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