2009-05-21 21 views
4

私のnhibernate detachedcriteriaオブジェクトの投影を作成する際に問題が発生しました。NHibernate投影ヘルプ

私はテーブルアドレスにリンクされたクラスSpaを持っています。

アドレスには、文字列であるCityというフィールドがあります。

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

私の究極の目的は、市の名前の明確なリストを取得することです。

私は別の都市ですべてのスパを得ることができたら、私も満足しています。

すべての私の試みは、naughtとhaventのために行われています。

は、これまで私が試してみた:

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を("街"))); ですが、エラーが発生しました: ソース配列内の少なくとも1つの要素を宛先配列型にキャストダウンできませんでした。 – CesarHerrera

答えて

2

あなたの質問には2つの部分があるように思えます。

1.私のDetachedCriteriaはどのように見えますか?

他の集計を実行していない場合は、GROUP BYDISTINCTと同じ結果になります。これは私が使用するクエリです:

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>();