2011-07-28 31 views
1

這是一個問題與無知的主題問,但我有searche dlong和硬,所以我希望這不會太痛苦。NHibernate多對多的落後查詢

我使用nhibernate進行多對多查詢。

我的對象地圖(不是我設計的,沒有得到很快改變任何時間):

電腦(ID,姓名等) - >(映射表) - >配置(ID,鍵,值)

一臺電腦可能有許多配置,任何配置可能屬於多臺電腦。我可以很好地閱讀計算機,並且列表(包)成員填充得很好。

然後我想要找到一臺擁有大量配置的計算機。

E.g. OS:有所有計算機上的Windows CPU:2GHz的 等

上我怎麼可能把這個變成一個條件查詢任何援助將不勝感激。我已經完成了一些基礎知識,但是圍繞這個做了一些艱辛的工作。

歡呼聲,任何幫助, 羅布。

+0

它被映射爲包或地圖嗎? –

回答

1

如果參數總是相同的,使用像查詢以下內容:

var computers = session.CreateQuery(
    @"select c 
    from Computer c 
     inner join c.Configurations as osconfig 
     inner join c.Configurations as cpuconfig 
    where 
     osconfig.Name = 'OS' 
     and osconfig.Value = :os 
     and cpuconfig.Name = 'CPU' 
     and cpuconfig.Value = :cpu") 
    .SetString("os", "Windows") 
    .SetString("cpu", "2GHz") 
    .List<Computer>(); 

如果你映射它作爲一個地圖,你甚至可以做這樣的事情:

var computers = session.CreateQuery(
    @"select c 
    from Computer c 
    where 
     c.Configurations['OS'] = :os 
     and c.Configurations['CPU'] = :cpu") 
    .SetString("os", "Windows") 
    .SetString("cpu", "2GHz") 
    .List<Computer>(); 

如果參數始終不同,請使用標準動態添加它們。