2009-05-21 159 views
4

我有一個問題,爲我的nhibernate detachedcriteria對象創建一個投影。NHibernate投影幫助

我有一個類,它鏈接到表地址。

地址有一個叫做City的字段,它是一個字符串。

public class Spa : IAggregateRoot 
{ 
     [BelongsTo("AddressID", Cascade = CascadeEnum.All)] 
     public Address Address { get; set; } 
} 

我的最終目標是獲得一個明確的城市名稱列表。

如果我能得到所有溫泉與不同的城市,我會很高興。

我所有的嘗試都是徒勞無功,還沒有找到有用的帖子。

到目前爲止,我已經試過:

DetachedCriteria query = DetachedCriteria.For<Spa>() 
         .CreateAlias("Address", "A") 

query.SetProjection(
     Projections.Distinct(Projections.ProjectionList() 
     .Add(Projections.Alias(Projections.Property("Address"), "A")))); 

var Spas = ActiveRecordMediator<Spa>.FindAll(query); 

我知道上面是不正確的,只是想找個地方開始。

任何幫助,將不勝感激。 還有任何簡單的預測教程,將不勝感激,似乎無法找到任何直接出現在那裏。

我也試過,但得到了施展的錯誤,尋找到它:

DetachedCriteria query = DetachedCriteria.For<Spa>() 
.CreateAlias("Address", "A") 
.SetProjection(Projections.Distinct(Projections.Property("A.City"))); 
+0

我也嘗試: 的DetachedCriteria查詢= DetachedCriteria.For () .CreateAlias( 「地址」, 「A」) .SetProjection(Projections.Distinct(Projections.Property (「一座城市」))); 但出現錯誤: 源數組中至少有一個元素無法被轉換爲目標數組類型。 – CesarHerrera 2009-05-21 16:10:36

回答

2

在我看來,有兩個部分你的問題。

1.我的DetachedCriteria應該是什麼樣的?

如果您未執行任何其他聚合,則GROUP BY應提供與DISTINCT相同的結果。這是我將使用的查詢:

var query = DetachedCriteria.For<Spa>() 
    .CreateAlias("Address", "A") 
    .SetProjection(Projections.GroupProperty("A.City")); 

2.如何使用Castle ActiveRecord執行它?

我從來沒有使用過的ActiveRecord,但基於該方法的簽名,我希望是這樣工作的:

var cities = ActiveRecordMediator<string>.FindAll(query); 

如果你有機會到NHibernate會話,你也可以執行這樣說:

var cities = query.GetExecutableCriteria(session).List<string>();