1

運が悪ければ、エンティティの関連付けから単一の値を投影しようとしています。以下のクエリのTrainerAddressからの都市名のみが必要です。トレーナーアドレスは、トレーナーのコンポーネントとしてマップされます。

session.QueryOver<Trainer>()
   .JoinAlias(x=>x.TrainerAddress.City, ()=> cityAlias, JoinType.LeftOuterJoin)
   .OrderBy(x => x.Name).Asc
   .SelectList(list => list
        .Select(x => x.Id).WithAlias(() => dto.Id)
        .Select(x => x.Name).WithAlias(() => dto.Name)
        .Select(x => x.TrainerAddress.City.Name).WithAlias(() => dto.City))//issue projecting here
  .TransformUsing(Transformers.AliasToBean<TrainerDTO>())
  .List<TrainerDTO>();

これは可能ですか?

4

1 に答える 1

2

TrainerAddress.City のエイリアスを指定していますが、そのエイリアスをどこにも使用していませんか? NHibernate が QueryOver でコンポーネントを適切にサポートしているかどうかは 100% わかりません。Criteria を使用するといくつか問題があったことはわかっていますが、おそらくこれでうまくいくでしょう。

session.QueryOver<Trainer>()
   .JoinAlias(x=> x.TrainerAddress.City, ()=> cityAlias, JoinType.LeftOuterJoin)
   .OrderBy(x => x.Name).Asc
   .SelectList(list => list
        .Select(x => x.Id).WithAlias(() => dto.Id)
        .Select(x => x.Name).WithAlias(() => dto.Name)
        .Select(x => cityAlias.Name).WithAlias(() => dto.City))
  .TransformUsing(Transformers.AliasToBean<TrainerDTO>())
  .List<TrainerDTO>();
于 2012-07-02T15:17:39.513 に答える