0

一個簡單的例子HOWTO查詢表,它的子類都存在

abstract class Car 
{ 
    public virtual long SerialNumber { get; set; } 
} 

class Mercedes : Car { } 

class Fiat : Car { } 

class Toyota : Car { } 

現在我想查詢哪些類型的車,從繼承的股票。這個怎麼做?或者是我的設計有缺陷。

例如

session.Save(new Mercedes() { SerialNumber = 1 }); 
session.Save(new Mercedes() { SerialNumber = 2 }); 
session.Save(new Toyota() { SerialNumber = 1 }); 

// later 
var models = session2.Query<Car>().SelectDistinct(car => car.GetType().Name); 

showModelComboBox.Items = models; 
+0

我認爲'Stock'是'Car'中定義的屬性。 'session.QueryOver ().Where(w => w.InStock)'不工作? – Rippo 2012-07-19 13:47:13

+0

股票爲「在數據庫中」 – Firo 2012-07-19 14:13:22

+0

這是你的真實的域名嗎?它看起來不是一個很好的繼承用例。 – 2012-07-19 15:32:14

回答

1

從我所看到的,下面的工作:

var models = session.Query<Car>().Select(x => x.GetType().Name).ToList(); 

...你可以申請Distinct後...但它實際上是獲取整個實體。 不好。

看起來像Distinct不能應用於GetType表達式。

現在,你可以做到以下幾點:

var models = session.CreateQuery("select c.class from Car c").List(); 

它將返回原始鑑別,這是不理想,但它的工作原理。

+0

這看起來很酷,我會在嘗試返回時嘗試 – Firo 2012-07-19 19:29:00

+0

實際上該架構是一個經典的TPH,其中一半列的公共列爲所有列,然後依賴於各列的列類型列。因爲即使是一對多也依賴於我認爲這將是一個好主意的類型。 – Firo 2012-07-19 19:31:42