2010-07-07 58 views
0

我不知道我怎麼能代表在標準API如何根據條件返回連接的對象?

return DataContext.Session.CreateQuery(" 
    select 
     ss.PracticeArea 
    from Subsection as ss 
    where ss.Location = :Location 
    ") 
    .SetEntity("Location", location) 
    .List<PracticeArea>(); 

where子句是直線前進足夠我絆倒位是如何讓加盟對象作爲結果下面?

DataContext.Session.CreateCriteria<Subsection>() 
    .Add(Restrictions.Eq("Location", location)) 
    .List<PracticeArea>(); 

這是我的嘗試,它不工作,因爲它返回錯誤的類型。

回答

3

試試這個:

DataContext.Session 
    .CreateCriteria<Subsection>() 
    .CreateCriteria("Subsecion", "ss") 
    // the "select" clause is called "projection" 
    .SetProjection(Projections.Property("ss.PracticeArea")) 
    .Add(Restrictions.Eq("Location", location)) 
    .List<PracticeArea>(); 
+0

看起來像我應該前進的方向 然而,它似乎在隨後的選擇而不是一擊中得到練習區域。 對不起,我不認爲這是明確的位置和PracticeArea是實體。 令我困惑的是第二個CreateCriteria? 在此先感謝。 – 2010-07-07 12:16:25

+0

第二個CreateCriteria只是連接。你可以嘗試沒有它。如果執行的選擇過多,請嘗試'.SetFetchMode(ss.PracticeArea,FetchMode.Join)' – 2010-07-07 12:31:07

+0

謝謝,它已經開始了。 – 2010-07-07 12:51:17

0

我已經得到了以下的工作,我不知道,如果它要執行比使用投影好還是壞?

DetachedCriteria subsections = DetachedCriteria.For<Subsection>() 
    .SetProjection(Projections.Property("PracticeArea.Id")) 
    .Add(Restrictions.Eq("Location", location)); 

return DataContext.Session 
    .CreateCriteria<PracticeArea>() 
    .Add(Subqueries.PropertyIn("Id",subsections)) 
    .List<PracticeArea>();