4

nhibernate detachedcriteria オブジェクトのプロジェクションの作成に問題があります。

テーブル Address にリンクされているクラス Spa があります。

Address には、文字列である 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"))); 
4

1 に答える 1

2

あなたの質問には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>();
于 2011-05-07T01:58:24.527 に答える