2013-10-14 37 views
0

一個看似簡單的問題原來更加困難比我想:選擇父給出子ID

public class SomeCategory 
{ 
    public virtual int Id { get; set; } 
    public virtual IList<SomeClass> SomeInstances { get; set; } 
} 

public class SomeClass 
{ 
    public virtual int Id { get; set; } 
} 

有一個1:SomeClass的和SomeCategory米之間關係(即SomeClass的實例屬於一個SomeCategory和SomeCategory可以有幾個SomeClass實例)。

問題如何獲得SomeCategory給定SomeClass Id(Linq to NHibernate)?

回答

3

我假設你將有機會獲得SomeCategory列表,然後

var category = someCategoryList.FirstOrDefault(e => e.SomeInstances 
           .Any(a => a.Id == someclassId)); 
+0

我認爲這也將工作 VAR測試=(從session.Query () 從C1下,在t.Classes 其中c1.Id == ID 選擇C).FirstOrDefault(); – Fran

1

你也可以做到這一點使用QueryOver嘗試。

Parent parentAlias = null; 
Child childAlias = null; 

var query = session.QueryOver<Parent>(() => parentAlias) 
        .JoinAlias(()=> parent.Childs,()=> childAlias) 
        .Where(()=> childAlias.Parent.Id == id) 
        .Select(()=> childAlias.Parent) 
        .SingleOrDefault(); 
+0

完全偏離主題,有人可以解釋爲什麼NH有一個看起來像這樣的API?爲什麼無精打采的lambda? –

+0

QueryOver API是ICriteria API的強類型版本。無精打采的lambda表現就像SQL中的別名一樣。此外,它可以幫助您構建查詢,而無需強制參考QueryOver 類。我真的比LINQ查詢更喜歡QueryOver。即使構建動態查詢,它也更具可讀性。 :) – cidico